diff --git a/cookbook/helper/image_processing.py b/cookbook/helper/image_processing.py index 376cf74ea..2e001b73a 100644 --- a/cookbook/helper/image_processing.py +++ b/cookbook/helper/image_processing.py @@ -5,7 +5,7 @@ from PIL import Image from io import BytesIO -def rescale_image_jpeg(image_object, base_width=720): +def rescale_image_jpeg(image_object, base_width=1020): img = Image.open(image_object) icc_profile = img.info.get('icc_profile') # remember color profile to not mess up colors width_percent = (base_width / float(img.size[0])) @@ -13,19 +13,18 @@ def rescale_image_jpeg(image_object, base_width=720): img = img.resize((base_width, height), Image.ANTIALIAS) img_bytes = BytesIO() - img.save(img_bytes, 'JPEG', quality=75, optimize=True, icc_profile=icc_profile) + img.save(img_bytes, 'JPEG', quality=90, optimize=True, icc_profile=icc_profile) return img_bytes -def rescale_image_png(image_object, base_width=720): - basewidth = 720 - wpercent = (basewidth / float(image_object.size[0])) +def rescale_image_png(image_object, base_width=1020): + wpercent = (base_width / float(image_object.size[0])) hsize = int((float(image_object.size[1]) * float(wpercent))) - img = image_object.resize((basewidth, hsize), Image.ANTIALIAS) + img = image_object.resize((base_width, hsize), Image.ANTIALIAS) im_io = BytesIO() - img.save(im_io, 'PNG', quality=70) + img.save(im_io, 'PNG', quality=90) return img @@ -37,8 +36,8 @@ def get_filetype(name): def handle_image(request, image_object, filetype='.jpeg'): - if sys.getsizeof(image_object) / 8 > 500: - if filetype == '.jpeg': + if (image_object.size / 1000) > 500: # if larger than 500 kb compress + if filetype == '.jpeg' or filetype == '.jpg': return rescale_image_jpeg(image_object), filetype if filetype == '.png': return rescale_image_png(image_object), filetype diff --git a/cookbook/integration/integration.py b/cookbook/integration/integration.py index c349705b7..d9b80eb9f 100644 --- a/cookbook/integration/integration.py +++ b/cookbook/integration/integration.py @@ -14,7 +14,7 @@ from django.utils.translation import gettext as _ from django_scopes import scope from cookbook.forms import ImportExportBase -from cookbook.helper.image_processing import get_filetype +from cookbook.helper.image_processing import get_filetype, handle_image from cookbook.models import Keyword, Recipe from recipes.settings import DATABASES, DEBUG @@ -52,7 +52,7 @@ class Integration: icon=icon, space=request.space ) - except IntegrityError: # in case, for whatever reason, the name does exist append UUID to it. Not nice but works for now. + except IntegrityError: # in case, for whatever reason, the name does exist append UUID to it. Not nice but works for now. self.keyword = parent.add_child( name=f'{name} {str(uuid.uuid4())[0:8]}', description=description, @@ -229,15 +229,14 @@ class Integration: self.ignored_recipes.append(recipe.name) recipe.delete() - @staticmethod - def import_recipe_image(recipe, image_file, filetype='.jpeg'): + def import_recipe_image(self, recipe, image_file, filetype='.jpeg'): """ Adds an image to a recipe naming it correctly :param recipe: Recipe object :param image_file: ByteIO stream containing the image :param filetype: type of file to write bytes to, default to .jpeg if unknown """ - recipe.image = File(image_file, name=f'{uuid.uuid4()}_{recipe.pk}{filetype}') + recipe.image = File(handle_image(self.request, File(image_file, name='image'), filetype=filetype)[0], name=f'{uuid.uuid4()}_{recipe.pk}{filetype}') recipe.save() def get_recipe_from_file(self, file):