From d4aada517b2e6ce59324c063bcee2b7673893045 Mon Sep 17 00:00:00 2001 From: Ruben Date: Sat, 11 Mar 2017 11:57:28 +0100 Subject: [PATCH] add width/height for works --- images.db | Bin 778240 -> 802816 bytes loader.py | 7 ++++++- models.py | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/images.db b/images.db index f012fc4644ee85a4a4c606f353e0e2562ca65295..7cdf71b946a97385a5a9fff2d3aff0c7f6489675 100644 GIT binary patch delta 10113 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
    &4kogRuI9oz{) zw~$jiblDtzI(hjOw9&ZbRa795uP>p5h+?E0isVoO2o)oP)%weqkd-uFLM|e`fwE?q z6-j5X7Cd~V>89cjmuy3?LPVhQKO_prSs3|!&H{w~$vQe0h~`l<^N`D-Ls=BXk(7FI zk+G#-yi>HMqljy|tDE4Ou5`2bI!|^siebjXw+l`;Bv&6PY=mpNq(;$0dK<-XZNE_r z*OMd3xkF+JNg&ovxICB73P~VVgZi|pnC6;FIv1ll!%~Sx^FkHF@O|J`y?ji2E)KPk zb9Myw}qUMRZ9lEt-1B#E_9 zdGD=_@blUTKX*Fm)yR;aJA;0Xm%zQ|E;u3KCBS);y8kXUf^$X#a6Zz2w#g%cUDKRS zujX=lNOdFl_QFQ+voVcu>2Rnq?AuowBfUza_b@{v2k*zg1c$){2l)eC2=O_Lk^`T7 zN_5-JwlION;-*4hDDPAqguL_8L9~PqUC-_9Lu%ac896AR9y}*|eWbV%$B=vb5GLdL zP&OQvBh1l<;%A0E3>MO1Qoi6duXG$vV{we~CvHLT|M-A3!2BvBCV09JX44(JONY|w zl6O#*arqr|lC|OX@@Vsz;vwztqD_YU9(rG(HwOW5RS)dN6CA-!7R{$K$lpFh4;Xd7 zN6%TPx+;RA87N9>u7V{)m0GBm(L$b&jJ^u@=#O5F2-mA9esp*a;iTbq)4Kit0u_36 A6951J diff --git a/loader.py b/loader.py index 1f9952b..fe0a224 100644 --- a/loader.py +++ b/loader.py @@ -92,8 +92,13 @@ def processWork(work : models.Artwork): f = loadEmotionsFromMs(work.filename) work.faces = f work.save() - if not os.path.exists(work.getThumbPath()): + if not os.path.exists(work.getThumbPath()) or work.width is None or work.height is None: img = Image.open(work.filename) + + work.width = img.size[0] + work.height = img.size[1] + work.save() + img.thumbnail((200,200)) img.save(work.getThumbPath()) return diff --git a/models.py b/models.py index a7b1ae6..9bdcd4a 100644 --- a/models.py +++ b/models.py @@ -58,6 +58,8 @@ class Artwork(BaseModel): emotion = ForeignKeyField(Emotion, related_name='artworks', index=True) created_date = DateTimeField(default=datetime.datetime.now) filename = CharField() + width = IntegerField(null=True) + height = IntegerField(null=True) colours = ColoursField(null=True) # serialised colours + percentages: [([r,g,b], percentage), ...] faces = JsonField(null=True) # Serialised MS data