现在我的代码写了PNG,但我无法打开它 - 文件错误。 没有弯曲所有的作品,但我需要裁剪png文件。用我的坐垫(没有PIL盒子)和透明图像。
Image.open(imagefile)
#image = image.crop(crop_coords) #only work without cropping
image.thumbnail([x, y], Image.ANTIALIAS)
imagefile = StringIO()
imagefile = open(file_destination, 'w')
try:
image.save(imagefile, "PNG", quality=90)
except:
print "Cannot save user image"
感谢您的帮助。
我注意到问题仅适用于带有索引PNG alpha图像的png文件。
答案 0 :(得分:2)
from PIL import Image
#from StringIO import StringIO
img = Image.open("foobar.png")
png_info = {}
if img.mode not in ['RGB','RGBA']:
img = img.convert('RGBA')
png_info = img.info
img = img.crop( (0,0,400,400) )
img.thumbnail([200, 200], Image.ANTIALIAS)
file_destination='quux.png'
# imagefile = StringIO()
imagefile = open(file_destination, 'wb')
try:
img.save(imagefile, "png", quality=90, **png_info)
imagefile.close()
except:
print "Cannot save user image"
答案 1 :(得分:0)
您必须以二进制模式打开文件,否则它会写入一些内容但文件可能已损坏。根据您的测试,文件将被破坏或不被破坏,这可能不是因为作物本身。
这是我制作的工作版本:
from PIL import Image
#from StringIO import StringIO
img = Image.open("foobar.png")
img = img.crop( (0,0,400,400) )
img.thumbnail([200, 200], Image.ANTIALIAS)
file_destination='quux.png'
# imagefile = StringIO()
imagefile = open(file_destination, 'wb')
try:
img.save(imagefile, "png", quality=90)
imagefile.close()
except:
print "Cannot save user image"
答案 2 :(得分:0)
这是一个使用numpy和Pillow的简单解决方案,只需用自己的坐标更改问号!
from PIL import Image
import numpy as np
def crop(png_image_name):
pil_image = Image.open(png_image_name)
np_array = np.array(pil_image)
# z is the alpha depth, leave 0
x0, y0, z0 = (?, ?, 0)
x1, y1, z1 = (?, ?, 0)
cropped_box = np_array[x0:x1, y0:y1, z0:z1]
pil_image = Image.fromarray(cropped_box, 'RGBA')
pil_image.save(png_image_name)