2017-08-31 3 views
1

私が書いたこのプログラムは、単一のイメージを取り、それをさまざまなサイズの7つの個別のPNGイメージにトリミングします。PILで複数のサイズのアイコンを保存する方法

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ファイルにそれらをマージしています。

私が望むのは、複数のPNGの出力ではなく、指定されたすべてのサイズの単一のICOファイルを出力することです。あなたの入力画像として

答えて

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を参照してください。

si zes

この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') 
+0

のお時間をありがとう、しかし、私が使用している画像は、ちょうど同じ画像が各1が最高のフィットするように設計され、縮小ではありません各解像度のグリッド。 https://imgur.com/a/BfRec最初のものを切り取って縮小するだけでは機能しません。 – arch129

関連する問題