djangourldjango-imagekit

django imagekit: set ProcessedImageField from image url


I have got an image url and I want to set a ProcessedImageField attribute from it during object saving. So far I have got this:

 class Video(Media):
      url = models.URLField('url', max_length=256, default='')
      embed_url = models.URLField('embed url', max_length=256, default='')
      thumbnail = ProcessedImageField(upload_to='uploads',
                                  processors=[ResizeToFit(width=1024, height=1024, upscale=False)],
                                  format='JPEG',
                                  options={'quality': 75})


    def save(self, *args, **kwargs):
        from django.core.files.temp import NamedTemporaryFile
        import shutil
        import requests
        import re

        params = {
            'url': self.url,
            'autoplay': 1,
            'format': 'json',
        }

        try:
            data = requests.get('http://www.youtube.com/oembed', params=params).json()          
            embed_url = re.search('src=[\'"]([^\'"]*)[\'"]', data['html']).group(1)                
            thumbnail_url = data['thumbnail_url']
        except:
            pass

        response = requests.get(thumbnail_url, stream=True)
        img_temp = NamedTemporaryFile(delete=True)
        shutil.copyfileobj(response.raw, img_temp)

        # now image data are in img_temp, how to pass that to ProcessedImageField?

        super(Video, self).save(*args, **kwargs)

Solution

  • You should be able to save directly to that property at that point.

    self.thumbnail.save("filename.ext", img_temp)