Tôi tự hỏi liệu có thể mở rộng hình ảnh GIF động bằng PIL hay không. Đặc biệt nguyên mẫu Plone của ImageField hiện mất hình ảnh động từ các hình ảnh thu nhỏ lại sử dụng phương pháp quy mô của nó:Làm thế nào để bạn chia tỷ lệ hình ảnh GIF động trong PIL và bảo toàn hoạt ảnh
def scale(self, data, w, h, default_format = 'PNG'):
""" scale image (with material from ImageTag_Hotfix)"""
#make sure we have valid int's
size = int(w), int(h)
original_file=StringIO(data)
image = PIL.Image.open(original_file)
# consider image mode when scaling
# source images can be mode '1','L,','P','RGB(A)'
# convert to greyscale or RGBA before scaling
# preserve palletted mode (but not pallette)
# for palletted-only image formats, e.g. GIF
# PNG compression is OK for RGBA thumbnails
original_mode = image.mode
img_format = image.format and image.format or default_format
if original_mode == '1':
image = image.convert('L')
elif original_mode == 'P':
image = image.convert('RGBA')
image.thumbnail(size, self.pil_resize_algo)
# decided to only preserve palletted mode
# for GIF, could also use image.format in ('GIF','PNG')
if original_mode == 'P' and img_format == 'GIF':
image = image.convert('P')
thumbnail_file = StringIO()
# quality parameter doesn't affect lossless formats
image.save(thumbnail_file, img_format, quality=self.pil_quality)
thumbnail_file.seek(0)
return thumbnail_file, img_format.lower()
tôi biết làm thế nào để xác định một GIF động: Các đánh giá lại sau True image.format == 'GIF' and image.seek(image.tell()+1)
. Tôi đã cố gắng không chuyển đổi sang chế độ RGBA nhưng điều đó không hoạt động.
Nền: Trong trường hợp Plone của chúng tôi, chúng tôi đã sửa đổi loại hình ảnh mặc định để đặt thuộc tính original_size của trường hình ảnh để buộc tất cả hình ảnh được thu nhỏ với cài đặt chất lượng phù hợp. Điều này phù hợp với jpegs nhưng có nghĩa là chúng tôi hiện không thể tải lên các ảnh động GIF
Chia tỷ lệ hình ảnh được tạo lưới có thể dẫn đến chất lượng hình ảnh không được chấp nhận. –