def test_accessor_methods(self): self.assertEqual(self.pl.get_testPhotoSize_photosize(), self.s) self.assertEqual(self.pl.get_testPhotoSize_size(), Image.open(self.pl.get_testPhotoSize_filename()).size) self.assertEqual(self.pl.get_testPhotoSize_url(), self.pl.cache_url() + '/' + \ self.pl._get_filename_for_size(self.s)) self.assertEqual(self.pl.get_testPhotoSize_filename(), os.path.join(self.pl.cache_path(), self.pl._get_filename_for_size(self.s)))
def test_accessor_methods(self): self.assertEqual(self.pl.get_testPhotoSize_photosize(), self.s) self.assertEqual(self.pl.get_testPhotoSize_size(), Image.open(self.pl.get_testPhotoSize_filename()).size) self.assertEqual(self.pl.get_testPhotoSize_url(), self.pl.cache_url() + '/' + \ self.pl._get_filename_for_size(self.s)) self.assertEqual( self.pl.get_testPhotoSize_filename(), os.path.join(self.pl.cache_path(), self.pl._get_filename_for_size(self.s)))
def my_create_size(self, photosize): if not self.image or self.size_exists(photosize): return # If we have an override then use it. Prevent circular import. from jmbo.models import ModelBase if isinstance(self, ModelBase): from jmbo.models import ImageOverride override = ImageOverride.objects.filter( target=self.modelbase_obj, photosize=photosize ).first() image_model_obj = override if override else self else: image_model_obj = self try: im = Image.open(image_model_obj.image.storage.open(image_model_obj.image.name)) except IOError: return # Save the original format im_format = im.format # Apply effect if found if image_model_obj.effect is not None: im = image_model_obj.effect.pre_process(im) elif photosize.effect is not None: im = photosize.effect.pre_process(im) # Resize/crop image if im.size != photosize.size and photosize.size != (0, 0): im = image_model_obj.resize_image(im, photosize) # Apply watermark if found if photosize.watermark is not None: im = photosize.watermark.post_process(im) # Apply effect if found if image_model_obj.effect is not None: im = image_model_obj.effect.post_process(im) elif photosize.effect is not None: im = photosize.effect.post_process(im) # Save file im_filename = getattr(image_model_obj, "get_%s_filename" % photosize.name)() try: buffer = BytesIO() if im_format != 'JPEG': im.save(buffer, im_format) else: im.save(buffer, 'JPEG', quality=int(photosize.quality), optimize=True) buffer_contents = ContentFile(buffer.getvalue()) image_model_obj.image.storage.save(im_filename, buffer_contents) except IOError as e: if image_model_obj.image.storage.exists(im_filename): image_model_obj.image.storage.delete(im_filename) raise e
def test(self): effect = PhotoEffect(name='test') im = Image.open(self.pl.image.path) self.assert_(isinstance(effect.pre_process(im), Image.Image)) self.assert_(isinstance(effect.post_process(im), Image.Image)) self.assert_(isinstance(effect.process(im), Image.Image))
def test_accessor_methods_size(self): self.assertEqual(self.pl.get_testPhotoSize_size(), Image.open(self.pl.get_testPhotoSize_filename()).size)
# Blindly catch exceptions pass else: # Jump through filesystem hoop to please photologue filename = self.youtube_id + '.jpg' filepath = os.path.join(mkdtemp(), filename) fp = open(filepath, 'wb') try: fp.write(response.read()) finally: fp.close() # Overlay a play button if possible video_play_image = preferences.GalleryPreferences.video_play_image if video_play_image: image = Image.open(filepath) overlay = Image.open(video_play_image) # Downsize image_overlay if it is larger than image w1, h1 = image.size w2, h2 = overlay.size if w2 > w1 or h2 > h1: ratio1 = w1 / float(h1) ratio2 = w2 / float(h2) if ratio1 > ratio2: resize_fract = h1 / float(h2) else: resize_fract = w1 / float(w2) overlay.resize(w2 * resize_fract, h2 * resize_fract, Image.ANTIALIAS) image.paste(overlay, (int((w1 - w2) / 2.0), int((h1 - h2) / 2.0)))