Return a willow image from Filter.run()

pull/2318/head
Karl Hobley 2015-12-14 10:16:55 +00:00 zatwierdzone przez Matt Westcott
rodzic 1565e74101
commit 84997c72e7
2 zmienionych plików z 11 dodań i 16 usunięć

Wyświetl plik

@ -249,7 +249,7 @@ class AbstractImage(CollectionMember, TagSearchable):
)
except Rendition.DoesNotExist:
# Generate the rendition image
generated_image, output_format = filter.run(self, BytesIO())
generated_image = filter.run(self, BytesIO())
# Generate filename
input_filename = os.path.basename(self.file.name)
@ -262,7 +262,7 @@ class AbstractImage(CollectionMember, TagSearchable):
'gif': '.gif',
}
output_extension = filter.spec.replace('|', '.') + FORMAT_EXTENSIONS[output_format]
output_extension = filter.spec.replace('|', '.') + FORMAT_EXTENSIONS[generated_image.format_name]
if cache_key:
output_extension = cache_key + '.' + output_extension
@ -273,7 +273,7 @@ class AbstractImage(CollectionMember, TagSearchable):
rendition, created = self.renditions.get_or_create(
filter=filter,
focal_point_key=cache_key,
defaults={'file': File(generated_image, name=output_filename)}
defaults={'file': File(generated_image.f, name=output_filename)}
)
return rendition
@ -387,8 +387,6 @@ class Filter(models.Model):
for operation in self.operations:
willow = operation.run(willow, image) or willow
output_format = original_format
if original_format == 'jpeg':
# Allow changing of JPEG compression quality
if hasattr(settings, 'WAGTAILIMAGES_JPEG_QUALITY'):
@ -396,22 +394,18 @@ class Filter(models.Model):
else:
quality = 85
willow.save_as_jpeg(output, quality=quality)
return willow.save_as_jpeg(output, quality=quality)
elif original_format == 'gif':
# Convert image to PNG if it's not animated
if not willow.has_animation():
output_format = 'png'
willow.save_as_png(output)
return willow.save_as_png(output)
else:
willow.save_as_gif(output)
return willow.save_as_gif(output)
elif original_format == 'bmp':
# Convert to PNG
output_format = 'png'
willow.save_as_png(output)
return willow.save_as_png(output)
else:
willow.save(original_format, output)
return output, output_format
return willow.save(original_format, output)
def get_cache_key(self, image):
vary_parts = []

Wyświetl plik

@ -211,8 +211,9 @@ def preview(request, image_id, filter_spec):
image = get_object_or_404(get_image_model(), id=image_id)
try:
response, image_format = Filter(spec=filter_spec).run(image, HttpResponse())
response['Content-Type'] = 'image/' + image_format
response = HttpResponse()
image = Filter(spec=filter_spec).run(image, response)
response['Content-Type'] = 'image/' + image.format_name
return response
except InvalidFilterSpecError:
return HttpResponse("Invalid filter spec: " + filter_spec, content_type='text/plain', status=400)