示例#1
0
 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)))
示例#2
0
 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)))
示例#3
0
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
示例#4
0
 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))
示例#5
0
 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))
示例#6
0
 def test_accessor_methods_size(self):
     self.assertEqual(self.pl.get_testPhotoSize_size(),
                      Image.open(self.pl.get_testPhotoSize_filename()).size)
示例#7
0
            # 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)))