def test_save(self): """ Ensure that these works: - image.save(filename='alice.jpg') - image.save(file=<File-Like Object>) - image.filename = 'bob.jpg'; image.save() """ image = images.from_file('tests/10x10.jpg') self.assertEqual(image._format, 'JPEG') new_filename = 'tests/save.jpg' image.save(filename=new_filename) self.assertEqual(image.filename, new_filename) self.assertTrue(os.path.exists(new_filename)) os.remove(new_filename) # Ensure image can be saved to a file like object file_like_object = io.BytesIO() self.assertFalse(file_like_object.getvalue()) image.save(file=file_like_object) self.assertTrue(file_like_object.getvalue()) new_filename = 'tests/save2.jpg' image.filename = new_filename image.save() self.assertTrue(os.path.exists(new_filename)) os.remove(new_filename)
def process(file, size): """ Process an image through its defined processors params :file: filename or file-like object params :size: string for size defined in settings return a ContentFile """ from . import conf # open image in piccaso raw_image = images.from_file(file) # run through all processors, if defined size_dict = conf.SIZES[size] # Format image if FORMAT defined in settings if 'FORMAT' in size_dict: raw_image.format = size_dict['FORMAT'] for processor in size_dict['PROCESSORS']: raw_image = processor['processor'](raw_image, **processor['kwargs']) # write to Content File image_io = io.BytesIO() raw_image.save(file=image_io) image_file = ContentFile(image_io.getvalue()) return image_file
def test_get_filename(self): # get_filename return its original filename if there's no changes image = images.from_file('tests/10x20.jpg') self.assertEqual(image.get_filename(), 'tests/10x20.jpg') # get_filename returns the right filename if format is changed image.format = 'png' self.assertEqual(image.get_filename(), 'tests/10x20.png') # get_filename falls back to self.name image.filename = None self.assertEqual(image.get_filename(), '10x20.png') # get_filename returns the right filename if format is changed (webp) image = images.from_file('tests/10x20.jpg') image.format = 'webp' self.assertEqual(image.get_filename(), 'tests/10x20.webp') # get_filename falls back to self.name (webp) image.filename = None self.assertEqual(image.get_filename(), '10x20.webp')
def test_format_getter_setter(self): image = images.from_file('tests/10x20.jpg') image.format = 'JPG' self.assertEqual(image.format, 'JPEG') image.format = 'png' self.assertEqual(image.format, 'PNG') image.format = "webp" self.assertEqual(image.format, 'WEBP')
def test_get_filename(self): # get_filename return its original filename if there's no changes image = images.from_file('tests/10x20.jpg') self.assertEqual(image.get_filename(), 'tests/10x20.jpg') # get_filename returns the right filename if format is changed image.format = 'png' self.assertEqual(image.get_filename(), 'tests/10x20.png') # get_filename falls back to self.name image.filename = None self.assertEqual(image.get_filename(), '10x20.png')
def test_rotate(self): image = images.from_file('tests/10x20.jpg') self.assertEqual(image.width, 10) self.assertEqual(image.height, 20) image.rotate(90) self.assertEqual(image.width, 20) self.assertEqual(image.height, 10) image.rotate(-90) self.assertEqual(image.width, 10) self.assertEqual(image.height, 20)
def test_quality(self): # Setting quality parameter shouldn't mess up image.save image = images.from_file('tests/10x20.jpg') new_filename = 'tests/save2.jpg' image.quality = 85 image.save(new_filename) os.remove(image.filename) image.format = 'png' image.save(new_filename) os.remove(image.filename)
def add_watermark(image, **kwargs): watermark_path = kwargs["watermark_path"] watermark_image = images.from_file(watermark_path) pil_image = image.get_pil_image() watermark_pil_image = watermark_image.get_pil_image() if watermark_pil_image.size != pil_image.size: # TODO: parse watermark dynamically based on ratio raise ValueError( "Watermark image should have the same dimension as image") if watermark_image.format != "PNG" or watermark_pil_image.mode != "RGBA": raise ValueError("Watermark must be PNG and containts alpha") pil_image.paste(watermark_pil_image, (0, 0), watermark_pil_image) image.set_pil_image(pil_image) return image
def test_save(self): """ Ensure that these works: - image.save(filename='alice.jpg') - image.filename = 'bob.jpg'; image.save() """ image = images.from_file('tests/10x10.jpg') self.assertEqual(image._format, 'JPEG') new_filename = 'tests/save.jpg' image.save(new_filename) self.assertEqual(image.filename, new_filename) self.assertTrue(os.path.exists(new_filename)) os.remove(new_filename) new_filename = 'tests/save2.jpg' image.filename = new_filename image.save() self.assertTrue(os.path.exists(new_filename)) os.remove(new_filename)
def process(file, size): """ Process an image through its defined processors params :file: filename or file-like object params :size: string for size defined in settings return a ContentFile """ from . import conf # open image in piccaso raw_image = images.from_file(file) # run through all processors, if defined size_dict = conf.SIZES[size] for processor in size_dict.get('processors'): raw_image = processor(raw_image, **size_dict) # write to Content File image_io = io.BytesIO() raw_image.save(file=image_io) image_file = ContentFile(image_io.getvalue()) return image_file
def test_add_watermark(self): image_path = 'thumbnails/tests/tests.png' watermark_path = os.path.join(TemporaryStorage().temporary_location, "test_watermark.png") original_image_path = os.path.join( TemporaryStorage().temporary_location, "test_bg.png") # different size original_image_file = images.from_file(image_path) original_image = original_image_file.get_pil_image() converted_image = original_image.resize((300, 300)) converted_image.save(original_image_path) original_image_file.set_pil_image(converted_image) watermark_image = Image.open(image_path) converted_watermark = watermark_image.resize((200, 200)) converted_watermark.save(watermark_path) kwargs = {"watermark_path": watermark_path} self.assertRaises(ValueError, add_watermark, original_image_file, **kwargs) converted_image = original_image.resize((200, 200)) converted_image.save(original_image_path) original_image_file.set_pil_image(converted_image) # not rgba converted_watermark = converted_watermark.convert("RGB") converted_watermark.save(watermark_path) self.assertRaises(ValueError, add_watermark, original_image_file, **kwargs) converted_watermark = converted_watermark.convert("RGBA") converted_watermark.save(watermark_path) # no error raised add_watermark(original_image_file, **kwargs)
def test_format_getter_setter(self): image = images.from_file('tests/10x20.jpg') image.format = 'JPG' self.assertEqual(image.format, 'JPEG') image.format = 'png' self.assertEqual(image.format, 'PNG')