我有一些循环遍历徽标properties
的代码,这些属性本身变成了徽标。
问题是,我有一个“抗锯齿/超采样”功能,可以检查properties["antialias"] == True
。
如果启用了AA,它将暂时将某些大小设置属性覆盖为大小的三倍,然后进行渲染,然后缩小为原始大小(除以三)。
这是重要的一小段代码:
if properties["antialias"]:
properties["font_size"] *= 3
properties["base_size"] = (properties["base_size"][0] * 3,
properties["base_size"][1] * 3)
properties["padding"] = (properties["padding"][0] * 3,
properties["padding"][1] * 3)
在这里,您可以看到
font_size
,(tuple) base_size
和(tuple) padding
都乘以3的情况。这就是已加载属性中的所有大小信息。因此,发生这种情况之后,图像将由PIL(枕头)生成,然后通过以下方式缩小尺寸:
if properties["antialias"]:
logo_image = logo_image.resize((round(logo_image.width / 3),
round(logo_image.height / 3)), Image.ANTIALIAS)
问题是,第一个图像工作正常。然后,由该循环生成的其他图像全部以三的幂指数增长。那显然不是指数代码。
我得出的结论是,调用的每个“属性”(每个循环使用的项目)字典都没有变化(也许只是修改后的值),而是反复地乘以三。
(基本上,我认为在每个循环中更改后的值都保持不变。)
如您所料,这是循环:
for properties in logo_list:
如果您需要阅读下面的完整代码,请参见。它从外部作用域变量和其他函数中调用,但是我不希望这个问题很重要。
for properties in logo_list:
if weight in properties["weights"]:
logo_name = "".join([region["text"] for region in properties["regions"]])
logo_file = logo_name + "-" + file[:-4] + "." + properties["type"].lower()
out_dir = os.path.join("out", logo_name)
try:
os.makedirs(out_dir)
except FileExistsError:
pass
if properties["antialias"]:
properties["font_size"] *= 3
properties["base_size"] = (properties["base_size"][0] * 3,
properties["base_size"][1] * 3)
properties["padding"] = (properties["padding"][0] * 3,
properties["padding"][1] * 3)
logo_image = generate(properties, font_path)
if properties["shrink"]:
logo_image = logo_image.crop(logo_image.getbbox())
if properties["padding"]:
logo_image = padding(properties, logo_image)
if properties["antialias"]:
logo_image = logo_image.resize((round(logo_image.width / 3),
round(logo_image.height / 3)), Image.ANTIALIAS)
if properties["background"]:
logo_image = background(properties, logo_image)
logo_image.save(os.path.join(out_dir, logo_file), properties["type"])
Since people asked, here is the absolute full code.
最佳答案
编辑:您正在遍历文件,然后对于每个文件,遍历了logo_list。然后,您修改logo_list的项目。因此,第二个文件将使用logo_list及其修改后的项目。这意味着您每次都乘以三,从而产生指数增长。
关于python - 列表迭代器中的项目值未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44836975/