如何使用PIL保存多尺寸图标

时间:2017-08-31 19:26:31

标签: python python-2.7 python-imaging-library

我编写的这个程序只拍摄一张图像并将其裁剪成7张不同大小的PNG图像。

import Image
img = Image.open("0.png")

ax1 = 0
ax2 = 0
ay1 = 0
ay2 = 0
incr = 0
last = 0
sizes = [256,128,64,48,32,24,16]

def cropicon (newsize):
    global ax1, ax2, ay2, imgc, last, incr
    incr += 1
    ax1 = ax1 + last
    ax2 = ax1 + newsize
    ay2 = newsize
    imgc = img.crop((ax1, ay1, ax2, ay2))
    imgc.save("%d.png" % incr)
    last = newsize

for size in sizes:
    cropicon(size)

Example of an input image I'm using.

我目前正在使用其他程序获取各个PNG并将它们合并为一个ICO文件。

我想要的是Python输出一个指定了所有尺寸的ICO文件而不是多个PNG的输出。

1 个答案:

答案 0 :(得分:0)

当您的输入图像重复相同的图标时:

Input image, with a large icon, then a smaller one to the right, and so on, with seven in total

然后只需裁剪第一个使用sizes参数创建图标:

from PIL import Image

size_tuples = [(256, 256),
               (128, 128),
               (64, 64),
               (48, 48),
               (32, 32),
               (24, 24),
               (16, 16)]

img = Image.open("0.png")

imgc = img.crop((0, 0, 256, 256))

imgc.save('out.ico', sizes=size_tuples)

请参阅docs

  

尺寸

     

此ico文件中包含的尺寸列表;这些是2元组,(width, height);默认为[(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (255, 255)]。任何大于原始尺寸或255的尺寸都将被忽略。

实际上那些文档中有一个拼写错误(我会修复); default includes (256, 256),而不是(255,255)。因此,默认值符合您的要求,您可以使用imgc.save('out.ico')保存:

from PIL import Image

img = Image.open("0.png")

imgc = img.crop((0, 0, 256, 256))

imgc.save('out.ico')