Ich erhalte hier einen float division by zero
Fehler:
sorl/thumbnail/engines/pil_engine.py in _get_image_entropy, line 239
Ich nenne es mit:
{% thumbnail comment.user.profile.avatar_image "30x30" crop="smart" as im %}
Dies geschieht bei einigen Bildern und nicht bei anderen. Das Bild, das mir Probleme bereitet, ist das folgende:
https://www.dropbox.com/s/m5e79cvk53ujs7b/Chelsea_physic_garden.jpg?dl=0
Nach einer kurzen Ausgrabung lautet der Code:
def _get_image_entropy(self, image):
"""calculate the entropy of an image"""
hist = image.histogram()
hist_size = sum(hist)
print hist_size
hist = [float(h) / hist_size for h in hist]
return -sum([p * math.log(p, 2) for p in hist if p != 0])
print hist_size
gibt eine Null in der Konsole an - daher der Fehler. Wir brauchen eine Art von try
/ except
für diese Berechnung, aber ich bin mir nicht sicher, wie die except
sein sollten!
Hätte sagen sollen, dass ich sorl-thumbnail==11.12.1b
benutze
Ich habe auch festgestellt, dass ich diesen Fehler nicht bekomme, wenn ich das Bild größer einstelle. Wenn Sie es eingrenzen, erhalten Sie den Fehler:
{% thumbnail comment.user.profile.avatar_image "37x37" crop="smart" as im %}
... aber ein Pixel größer nicht:
{% thumbnail comment.user.profile.avatar_image "38x38" crop="smart" as im %}
Vermutlich liegt das daran, dass bei sehr kleinen Bildern die Entropiedifferenzierung gegen Null tendiert. Was deutet darauf hin, dass die Entropieberechnung auf einem bereits reduzierten Bild ausgeführt wird? Sicherlich sollte der Entropie-Cropper auf dem Bild in voller Größe ausgeführt werden, um den "intelligentesten" Bereich zu bestimmen - und dann auf die gewünschte Größe verkleinert werden?
Habe den gleichen Fehler
Der gleiche Fehler wird reproduziert, wenn get_thumbnail
von sorl.thumbnail
auch wenn crop = 'center' verwendet wird
Versuchen Sie es mit Kissen == 3.1.0. Siehe # 429.
@ Lampslave Danke. Behebt das Problem.
Hilfreichster Kommentar
Versuchen Sie es mit Kissen == 3.1.0. Siehe # 429.