python 如何更改基于分割的分辨率大小

pxy2qtax  于 2023-01-24  发布在  Python
关注(0)|答案(3)|浏览(143)

我想改变图像的分辨率(nHeight =图片的高度),使其可分为8。我使用下面的python代码。有人能帮助我吗?

if (nHeight%8 != 0):
            try:
                while (nHeight%8 == 0):
                    nHeight = nHeight +1
                    print(nHeight%8)
            except:
                pass
ryhaxcpt

ryhaxcpt1#

你的意思是这样的:

while n_height % 8 != 0:
        n_height += 1

假设n_height在运行上面的代码块之前是17,那么运行之后它将是24。
if块不是必需的,因为如果分辨率大小已经可以被8整除,while将不会执行。
希望这个有用。

edqdpe6u

edqdpe6u2#

下面是一个更简单的形式,不使用循环try /*(除了 * 块),而是使用数学运算:

if nHeight % 8:
    nHeight = nHeight // 8 * 8 + 8
print(nHeight)

秘密是n // 8,它被称为 floor division([Python 2.Docs]:二进制算术运算)。
你也可以使用常规除法......假设 nHeight 是一个整数--如果分辨率是以像素表示的话,这是有意义的。

  • 整数除法返回商
  • 然后乘以 8 得到最高 8倍数,小于我们的数字
  • 最后,再加上一个 8,得到最低的 8倍数,大于我们的数字

整个表达式等价于nHeight = (nHeight // 8 + 1) * 8

oxf4rvwz

oxf4rvwz3#

您的代码有一个错误:while (nHeight%8 == 0)必须是while (nHeight%8 != 0),但这并不重要,因为通过一个简单的表达式就可以很容易地完成您想要完成的任务,该表达式完全消除了while循环和if测试:

nHeight = ((nHeight + 7) // 8) * 8

//是整数除法,去掉余数。通过在除法之前加上7,如果它已经可以被8整除,你不会改变结果,但是如果它不能被8整除,你会把除法结果加1;再次乘以8补偿了除法,并使得结果显然可被8除尽。
P.S.在Python中看到匈牙利符号是很不寻常的,它违反了PEP 8准则。

相关问题