2015-01-09 3 views
0

내 이미지의 크기를 조절하고 싶기 때문에 저장 방법을 재정의하고 있습니다. 내 문제는이 코드에서 분명하다. 내 데이터를 저장 한 후 어떻게되는지는 장고가 무한 루프를 시작한다는 것이다. 물론 self.vertical이 설정되어 있는지 (그리고 항상 설정되어 있는지) 확인하기 때문입니다. 저장 메소드가 항상 호출됩니다.장고의 이미지 크기 조정 및 업데이트

내 self.id가 none 인 경우이 문제를 해결할 수 있지만 사용자가 업데이트하려고하면 코드가 새로운 항목에만 작동하며 ID가 null이 아니기 때문에 아무 것도 변경되지 않습니다.

나는 또한 kwargs에 대한 잘못된 인수를 저장하려고 시도하고 저장 한 후 true로 설정했지만 작동하지도 않았습니다. 누군가 내가 이것을 어떻게 해결할 수 있을지 생각하고 있습니까?

추 신 : get_thumbnail은 sorl thumbnail plugin의 한 방법입니다.

def save(self, *args, **kwargs): 
     if self.vertical_poster: 
      super(Movie, self).save(*args, **kwargs) 

      resized_vertical = get_thumbnail(self.vertical_poster, "155x240", quality=99)    

      #save the new resized file    
      self.vertical_poster.save(resized_vertical.name, ContentFile(resized_vertical.read()), True) 

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

모든 아이디어 또는 샘플 코드를 제공해드립니다. 감사합니다

답변

0

내 솔루션 내 저장 메소드를 오버라이드 (override)되지 않았습니다. 나는 뭔가 다른 것을했습니다 :

나는 "django-resized"를 사용하기로 결정했습니다. 이 플러그인은 "sorl-썸네일"와 호환되며 아래와 같은 모델 필드에 지정된 크기에 이미지 원본의 크기를 조정 :

from django_resized import ResizedImageField 

class Movie(models.Model): 

    .... 

    vertical_poster = ResizedImageField(upload_to="movies", width=155, height=240) 

내가 그 다른 사람들을 도울 수 있기를 바랍니다.

링크 : https://github.com/un1t/django-resized

0

이미지가 이미 원하는 치수인지 여부를 확인할 수 있습니다. 제 생각에는 https://pypi.python.org/pypi/dimensions을 사용하면 간단 해집니다.

def save(self, *args, **kwargs): 
    if self.vertical_poster: 
     import dimensions 

     # Set desired dimensions 
     width = 155 
     height = 240 

     image_info = dimensions.dimensions(self.vertical_poster) 

     if image_info[0] != width and image_info[1] != height: 
      dimension = '%dx%d' % (width, height) 
      resized_vertical = get_thumbnail(self.vertical_poster, dimension, quality=99)    

      #save the new resized file    
      self.vertical_poster.save(resized_vertical.name, ContentFile(resized_vertical.read()), True) 
    super(Movie, self).save(*args, **kwargs) 

희망이 있습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 어쨌든이 작업을 수행 할 수 있지만 get_thumbnail은 이미지의 크기를 정확하게 조정하지 않습니다. 그것은 항상 달라집니다 ... – Lara

+0

크기 조정을위한 치수를 정확히 얻으려면 어디에서 볼 수 있습니까? –

0

당신이 ImageField을 사용하는 경우는 다음과 같이 그것을 할 수 있습니다 :

def save(self, *args, **kwargs): 
    if self.vertical_poster.x != 155 or self.vertical_poster.y != 240: 
     resized_vertical = get_thumbnail(self.vertical_poster, "155x240", quality=99)    

     # save the new resized file    
     self.vertical_poster.save(resized_vertical.name, ContentFile(resized_vertical.read()), True) 

    super(Movie, self).save(*args, **kwargs) 
+0

안녕하세요, 그쪽의 답변에 감사드립니다. 어쨌든이 작업을 수행 할 수 있지만 get_thumbnail은 이미지의 크기를 정확하게 조정하지 않습니다. 항상 ... – Lara