From 54d6c4da2d9df2171f5400fb3ab892079dbf1647 Mon Sep 17 00:00:00 2001 From: blade <8019068@qq.com> Date: Mon, 3 Nov 2025 13:20:57 +0800 Subject: [PATCH] optimize image relevant logic --- .../truth_social_retriever.cpython-312.pyc | Bin 21347 -> 21454 bytes core/wechat.py | 35 +++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core/media/__pycache__/truth_social_retriever.cpython-312.pyc b/core/media/__pycache__/truth_social_retriever.cpython-312.pyc index 3790dfadca6a4da25334ead8b621a4c210bf222e..1f7ded051aac5db77b7157075e09f2c6bfa877a0 100644 GIT binary patch delta 2130 zcmZ`(drVtZ7{8|vN?YmZ`$1V-%3y^;AHX__yp&C*8;@;qGlGn8D^j3kx1Bt8yUm1T zMv&pY1X*0-a4Ivnj8TpFk8$eErU`?LWMr96lMFNKCOZ zTA|0$@S0o=OUmy=a#l8sm{b^3m`rL`^bSR9!djw71}mFDF^270_(!D{DcY!rl2vf| zPPHUmN$Z{@kz!U!>p3RE%)l`&YE4>PBcfs{zX{|jWsz#dre@W&kyI4Xuo|41&Sk3U zwVX}MYO&3fP*a;}!2~Z>6ZV)Bo)Swd757ARv;ccEh?is56_&|m=$I;2S4B0J<9+q4 zo;yvSMj~F$iCL6c@hY(vrx3HJWv{YxdWZ@j0maJw7IHcmQj5Ka8oVW-0@AQGRxB=L zeLM|OtFBlcx6+FCDvDx`K}2YRE{AwS#IP#N@Sm_|d@ciRn^ObxRn+kHhGA;E$>M$DogO)}x>qgyF5B~+K8)1bf z;7y$o?&$PuQdeD_BbHZ5^7w-t@w{;AioQF}5;Lwrk84OgfHS6|kEx8rRpPtbT+vef zX`Uq=OWYp%Z1Kp*jp>0K(}(VieY!Y3vUqxU@%^*6Kl#9Gj^0TV^6*{#p1xf!-qh3L z>k79816PGUh6yrIv9MvVo zpKqAYZXB&%FlJsc7R?!p=8c{OYwmdISn0{~(W(Wb<=w5vww_X*(S4+w%${~%ww28r z%a%4K>4@UFDB_Vb`e83{OZmru{k5BityH$bk|4)-wT{MPM%mn~*6We3*cj!0QBtpe(BqU4-LV z!)Pd)mz~c;Z$pFaU{W9Pj>6A2dpgri_{y$K4_?}mV{${_&hh9DV@oI*gL!!{WhCV& zyq4ocm!nfTR%GnQmKHvS_#p9Qeg8-DRc=QjXtZw<^O#>*5&rPj!h}5?Rlq^V=TIeA z!X=jquIH5^Ir+PQGd}}D>y+TjuS6>D({jiuTV@r7;^aUEtzeO#a~*XgJQA=woJh-M zbU7|?8qYZ`kI|68$Ih3QBiFj7Fq?CgkTu@j?6xnnJu!wqZ71B%!mLaANR2A!FQ|Bo z{{PqLUEa0JA(aGp!-BzN{FA`R!X2m({w$nC{n1lJ9Y{x>fjLHidv5YzR|WoH8!dg#nDsJeYEuQZ37 zI(?x~bF1$bc7$%i_{Oi$Pf@nmF3{AL)l8 aM|7&b03jA`ZV#+^ISFa*Q3RQtIR0ORuMBSh delta 1955 zcmb7FTWk|Y6y34cacn2XZ|^4YE4FbQ$4;C#Nkoc(R)IDzkN^RNl#OUY>yX9BKz4a3 zQbnuKg05PELKVUXfg&W6{cc5Dp|;SHrbNYxP}K@5z7Vf|P^qt(wbzMMRH-BR%-wVE zxpQac?)ug=x_1E?Zx$EpDLiK0qXv#|x@wG?HGgO+>NE`3I$@L9j}F0z`8u*mt1PEb z0WTOi3kz4<8F*^FflTnJE$Fcc+6juYC!Hh@8G`XL%37Fr0J7V)<^f8y2xd5Dwuf|z zSFmu-HWIJH79(3)Y_YN>#}<_+v7%LgCvkhDV9hf&!N!%cSTEWIJJyxSIveMbIfvlD zoO>~s-NVtBRoS|*$Ft~Z_3ow=kLcuR?DY|^Y?bFNzpQZbYXs*SYI{3gmk}7UBWpmZ zNm1tb;1XWWljT8h=$BbIIUk}Dh^7P+3^O*jU{M5!8hb!f2}9D8Ef^OQf=3Q}iAjmz zEPK{a6#q%mmy3X7tL-Ks?-yBt8VrKZX>Df}jmR#!q&%C;)Q7jrauxD+E!Yan+oc9W zB!`C;^!X!V1$H;ZRh~!kL6dbV;B&@`A|w*A@SQWvMqacMZigyZ#zaF=r6NR~RF64n zf+9^FH2A4xk+S2#Dw1`5OnF|M0~F7SB}>jGCX`H2AFCF#ZlO4XSaP@o=Y1_}rBKoY zHyK~+QeE|b=u(Oc$H)HI3s1 zz3Y!mw@tOB3$KN~@7+A_-!fj9VZ3*k_#6|TXX-MZ(4=@qoH#O0XBgLH(V3!i8>cr< zZN9iW&EF2T%rmV&yS-9*`3SOR0u^@x?Q?q7GrEWOyKWZ9QZ9~NkPYiuX z*YNx|K?Pd_-4#K6uwUxe>pM&7Tcxh9R_(23V^@)Ow#b3)*>Yo7qjt7Y)72{d9k_y8 z4&i8ign&R`KLL@zUIN1y!WzDg*dGvRA@B}?G5CG?c61#!g-+6Am;h7IA)yMp3VjI9 z$|D5_NYF=cwz4X?pj&%jSO4DRz)*tEueYG-=lLN%T$s&12ESG|F(ZtyEf z8UgAfHE34qkNA;i6f?Wj7?eTc$@4RtPWjS(R@H;b!4zGqQ}bFudlK=3@OspRwt^7- z1t#J~*k5ZyX42rWJ=O+OMjKp-l_R^%+>5=0+kp7~tTE=S$!Z-Ot=HzB#Og)91v+9j zcv$^)PW?@d_g`vH{7pG(B0hs>E9|Td%k$aVs65}5XB)Wc*1fPQv)T%%{{K{^hp*~u zhrlTU`EJd=9rBAYLmX)WDfp=;ZrqDB4d+%rqsaW2lU%)Z W2>;9WY)CA7qX0RcQUv*pIQ}1Sblp1u diff --git a/core/wechat.py b/core/wechat.py index 293f896..786fd28 100644 --- a/core/wechat.py +++ b/core/wechat.py @@ -11,6 +11,8 @@ import hashlib import json import os import time +import io +from PIL import Image, ImageChops logger = logging.logger class Wechat: @@ -51,6 +53,7 @@ class Wechat: 发送图片消息 """ image_bytes = self.download_image(image_url) + base64_str, md5_str = self.get_base64_and_md5(image_bytes) data = { "msgtype": "image", @@ -74,9 +77,35 @@ class Wechat: def download_image(self, image_url): """下载图片并返回 bytes""" - response = requests.get(image_url, timeout=10) + response = requests.get(image_url, timeout=300) response.raise_for_status() # 抛出 HTTP 错误 - return response.content + image_bytes = response.content + # 得到图片的长与宽 + image_width, image_height = self.get_image_width_and_height(image_bytes) + if image_width > 720 or image_height > 720: + # 如果图片长宽大于720,则缩小图片 + # 计算缩放比例 + scale = 720 / max(image_width, image_height) + new_width = int(image_width * scale) + new_height = int(image_height * scale) + # 缩放图片 + image = Image.open(io.BytesIO(image_bytes)) + image.thumbnail((new_width, new_height), Image.Resampling.LANCZOS) + # 将缩放后的图片保存为bytes + img_byte_arr = io.BytesIO() + # 保持原始格式,如果是RGBA格式则保存为PNG,否则保存为JPEG + if image.mode in ('RGBA', 'LA', 'P'): + image.save(img_byte_arr, format='PNG') + else: + image.save(img_byte_arr, format='JPEG', quality=95) + image_bytes = img_byte_arr.getvalue() + return image_bytes + + def get_image_width_and_height(self, image_bytes): + """得到图片的长与宽""" + image = Image.open(io.BytesIO(image_bytes)) + width, height = image.size + return width, height def get_base64_and_md5(self,image_bytes): """计算 Base64(不带 data: 前缀)和 MD5""" @@ -96,6 +125,8 @@ class Wechat: response.raise_for_status() return response.json() + + def send_news(self, news: list): """ 发送图文消息