Files
game-cards-poker-design/backend/apps/exports/__pycache__/utils.cpython-314.pyc

73 lines
8.8 KiB
Plaintext
Raw Normal View History

+
<00><>j<><00><00>f<00>^RIHtHt^RIt^RItR RltR RltRtRtRt RR^R ^R
^/3R lt
R#) <0A>)<02>Image<67> ImageDrawNc<04><00>\P!V4PR4pV^8<>dY\VPV,4\VP
V,43pVP V\P4pV#)u加载图片并应用缩放<E7BCA9>RGBA)r<00>open<65>convert<72>int<6E>width<74>height<68>resize<7A>LANCZOS)<04> file_path<74>scale<6C>img<6D>new_sizes&& <20>AD:\selfgame\game-cards-poker-design\backend\apps\exports\utils.py<70>
load_imagersa<00><00>
<0F>*<2A>*<2A>Y<EFBFBD>
<1F>
'<27>
'<27><06>
/<2F>C<EFBFBD> <0C>q<EFBFBD>y<EFBFBD><17><03> <09> <09>E<EFBFBD>)<29>*<2A>C<EFBFBD><03>
<EFBFBD>
<EFBFBD>U<EFBFBD>0B<EFBFBD>,C<>D<><08><11>j<EFBFBD>j<EFBFBD><18>5<EFBFBD>=<3D>=<3D>1<><03> <0E>J<EFBFBD>c<04><><00>\W4pVPwr4V^,pVP^^W534pVP^WSV34pVP\P
4pWg3#)u
生成JQK中心对称图案
输入:原始图片路径
输出:中心对称的图像数组(上半部分、下半部分)
)r<00>size<7A>crop<6F> transposer<00>FLIP_TOP_BOTTOM)<08>original_image_pathr<00>originalr
r <00> half_height<68>top_half<6C> bottom_halfs&& r<00>generate_symmetrical_face_cardrsp<00><00> <1A>-<2D>5<>H<EFBFBD><1C>M<EFBFBD>M<EFBFBD>M<EFBFBD>E<EFBFBD><18>A<EFBFBD>+<2B>K<EFBFBD><18>}<7D>}<7D>a<EFBFBD><11>E<EFBFBD>7<>8<>H<EFBFBD><1B>-<2D>-<2D><11>K<EFBFBD><06> ?<3F>@<40>K<EFBFBD><1D>'<27>'<27><05>(=<3D>(=<3D>><3E>K<EFBFBD> <13> <20> rc<04><00>VP'd<>VPpVP^,pVP^,pVPRR4p\P!VR4pVP RWE33VR,R7VPR4pV'df\ PPV4'd?\W<>4p V^,p
\^WZ4Fp VPV ^V 3V 4K R#R#R#R#) u渲染背景层<E699AF>colorz#FFFFFFr<00>FF<46><01>fill<6C> texture_pathN<68>rr) <0C>
propertiesr<00>getr<00>Draw<61> rectangle<6C>os<6F>path<74>existsr<00>range<67>paste) <0C>canvas<61>layerrr'r
r <00>bg_color<6F>drawr%<00>texture<72> bg_height<68>ys &&& r<00>render_backgroundr7%s<><00><00> <0C><17><17><17><1A>%<25>%<25>
<EFBFBD><16> <0B> <0B>A<EFBFBD><0E><05><17><1B><1B>Q<EFBFBD><1E><06><1E>><3E>><3E>'<27>9<EFBFBD>5<><08><19>~<7E>~<7E>f<EFBFBD>f<EFBFBD>-<2D><04> <0C><0E><0E><06><15><0F>0<>x<EFBFBD>$<24><EFBFBD><0E>G<>"<22>~<7E>~<7E>n<EFBFBD>5<> <0C> <17>B<EFBFBD>G<EFBFBD>G<EFBFBD>N<EFBFBD>N<EFBFBD><<3C>8<>8<> <20><1C>5<>G<EFBFBD><1E>!<21> <0B>I<EFBFBD><1A>1<EFBFBD>f<EFBFBD>0<><01><16> <0C> <0C>W<EFBFBD>q<EFBFBD>!<21>f<EFBFBD>g<EFBFBD>6<>1<>9<><<3C>rc<04>z<00>VP'dVPP'gR#\PP VP
VPP4p\PP V4'gR#\WC4pVP;'g/pVPR^4pVPR^4pVPRVP^,4p VPRVP^,4p
VPwr<>WqP, V ,p W<>P, V ,pW<>P, V ,pW<>P, V ,pVP4pVPVV3\P 4W<>VP^,,
^, ,pVVVP^,,
^, ,pVP#V\%V4\%V43V4R#)u'渲染图片层人像、花色等N<EFBC89>xr6r
r )<13>file_refrr+r,<00>join<69>
media_rootr-rr'r(r<00>
card_width<EFBFBD> card_height<68>copy<70> thumbnailrr r/r )r0<00>projectr1r<00>
asset_path<EFBFBD>imager'r9r6r
r <00> canvas_width<74> canvas_height<68>actual_x<5F>actual_y<5F>actual_w<5F>actual_h<5F>cropped<65>paste_x<5F>paste_ys&&&& r<00>render_image_layerrM<s<><00><00> <10>><3E>><3E>><3E><15><1E><1E>!9<>!9<>!9<><0E><13><17><17><1C><1C>g<EFBFBD>0<>0<>%<25>.<2E>.<2E>2J<32>2J<32>K<>J<EFBFBD> <0A>7<EFBFBD>7<EFBFBD>><3E>><3E>*<2A> %<25> %<25><0E> <16>z<EFBFBD> )<29>E<EFBFBD><17>!<21>!<21>'<27>'<27>R<EFBFBD>J<EFBFBD><12><0E><0E>s<EFBFBD>A<EFBFBD><1E>A<EFBFBD><12><0E><0E>s<EFBFBD>A<EFBFBD><1E>A<EFBFBD> <16>N<EFBFBD>N<EFBFBD>7<EFBFBD>E<EFBFBD>J<EFBFBD>J<EFBFBD>q<EFBFBD>M<EFBFBD> 2<>E<EFBFBD> <17>^<5E>^<5E>H<EFBFBD>e<EFBFBD>j<EFBFBD>j<EFBFBD><11>m<EFBFBD> 4<>F<EFBFBD>#)<29>+<2B>+<2B><1F>L<EFBFBD><11>&<26>&<26>&<26>,<2C>6<>H<EFBFBD><11>'<27>'<27>'<27>=<3D>8<>H<EFBFBD><16>*<2A>*<2A>*<2A>l<EFBFBD>:<3A>H<EFBFBD><16>,<2C>,<2C>,<2C> <0A>=<3D>H<EFBFBD><14>j<EFBFBD>j<EFBFBD>l<EFBFBD>G<EFBFBD> <0B><15><15>x<EFBFBD><18>*<2A>E<EFBFBD>M<EFBFBD>M<EFBFBD>:<3A><17>W<EFBFBD>\<5C>\<5C>!<21>_<EFBFBD>4<><01>9<>9<>G<EFBFBD><16>(<28>W<EFBFBD>\<5C>\<5C>!<21>_<EFBFBD>4<><01>9<>9<>G<EFBFBD>
<EFBFBD>L<EFBFBD>L<EFBFBD><17>3<EFBFBD>w<EFBFBD><<3C><13>W<EFBFBD><1C>6<><07>@rc<04>l<00>VP;'g/p\P!VR4pVPRR4pVPR^4pVPR^4pVPRR4pV'd<>\ V\
4'd}\ VPR^4V,4p VPR 4p
^R
IHp V
'd9\PPV
4'dV PW<>4p MRp M^R
IHp V P4p VPR R 4p V PR 4'd@\ V R,^4p\ V R,^4p\ V R,^4pW<>V^<5E>3pMRpVPwppV\ P", V,pV\ P$, V,pVP'RW\R7pV^,V^,,
pV^,V^,,
pVV\ P",R,V,
^, ,pVV\ P$,R,V,
^, ,pVP)\ V4\ V43W\VR7R# Rp EL<>;i)u渲染文字层r<00>text<78>r9r6<00>fontNrr,)<01> ImageFontr!z#000000<30>#:<3A><00>N:rU<00>N:rV<00>N)rQg333333<33>?g<00>?)rQr$)rrr<00><>r&)r'rr)r(<00>
isinstance<EFBFBD>dictr <00>PILrRr+r,r-<00>truetype<70> load_default<6C>
startswithrrAr=r><00>textbboxrO)r0r1rr'r3rOr9r6rQ<00> font_size<7A> font_pathrR<00> custom_fontr!<00>r<>g<>br$rDrErFrG<00>bbox<6F>
text_width<EFBFBD> text_heightrKrLs&&& r<00>render_text_layerrics-<00><00><16>!<21>!<21>'<27>'<27>R<EFBFBD>J<EFBFBD> <14>><3E>><3E>&<26>&<26> )<29>D<EFBFBD> <15>><3E>><3E>&<26>"<22> %<25>D<EFBFBD><12><0E><0E>s<EFBFBD>A<EFBFBD><1E>A<EFBFBD><12><0E><0E>s<EFBFBD>A<EFBFBD><1E>A<EFBFBD> <16>><3E>><3E>&<26>$<24> '<27>D<EFBFBD> <0B>
<EFBFBD>4<EFBFBD><14>&<26>&<26><17><04><08><08><16><12>,<2C>u<EFBFBD>4<>5<> <09><18>H<EFBFBD>H<EFBFBD>V<EFBFBD>$<24> <09>!<21> <14><12><17><17><1E><1E> <09>2<>2<> #<23>'<27>0<>0<><19>F<> <0B><1F>K<EFBFBD>!<21><1F>,<2C>,<2C>.<2E> <0B> <17>N<EFBFBD>N<EFBFBD>7<EFBFBD>I<EFBFBD> .<2E>E<EFBFBD> <0C><17><17><03><1C><1C> <0F><05>c<EFBFBD>
<EFBFBD>B<EFBFBD> <1F><01> <0F><05>c<EFBFBD>
<EFBFBD>B<EFBFBD> <1F><01> <0F><05>c<EFBFBD>
<EFBFBD>B<EFBFBD> <1F><01><11>a<EFBFBD><13>~<7E><04><1D><04>#)<29>+<2B>+<2B><1F>L<EFBFBD>-<2D><11>G<EFBFBD>&<26>&<26>&<26>,<2C>6<>H<EFBFBD><11>G<EFBFBD>'<27>'<27>'<27>=<3D>8<>H<EFBFBD> <0F>=<3D>=<3D><16><14>=<3D> 8<>D<EFBFBD><15>a<EFBFBD><17>4<EFBFBD><01>7<EFBFBD>"<22>J<EFBFBD><16>q<EFBFBD>'<27>D<EFBFBD><11>G<EFBFBD>#<23>K<EFBFBD><17>,<2C><17>);<3B>);<3B>;<3B>c<EFBFBD>A<>J<EFBFBD>N<>RS<52>S<>S<>G<EFBFBD><16>-<2D>'<27>*=<3D>*=<3D>=<3D><03>C<>k<EFBFBD>Q<>UV<55>V<>V<>G<EFBFBD><08>I<EFBFBD>I<EFBFBD>s<EFBFBD>7<EFBFBD>|<7C>S<EFBFBD><17>\<5C>*<2A>D<EFBFBD><14>I<EFBFBD>N<><4E>? #<23>"<22> <0B>s <00>;J,<00>,J3<03>standard<72>hdzultra-hdc<04><><00>VPV^4p\^2V,4p\^2V,4p\VP^d,
V,4p\VP^d,
V,4p\P
!RWx34p \ P!V R4p
V
PR Wx33R
R7\PPVVRR7PR4p V FNp V Pp V R8Xd\W<>V4K$V R8Xd\W<>W<EFBFBD>4K9V R8XgKB\!W<>V4KP V #) u<>
生成单张牌的PNG图片
Args:
project: Project对象
card_key: 牌面key如'hearts-A', 'spades-K', 'joker-big'
resolution: 分辨率standard/hd/ultra-hd
scale_map: 分辨率对应的缩放比例
Returns:
Image对象
rr#T)rA<00>card_key<65>visible<6C>z_index<65>
backgroundrCrOr&)rXrXrXrX)r(r r=r>r<00>newrr)r*<00> CardLayer<65>objects<74>filter<65>order_by<62>
layer_typer7rMri)rArm<00>
resolution<EFBFBD> scale_mapr<00>x_offset<65>y_offset<65>
draw_width<EFBFBD> draw_heightr0r3<00>layersr1rvs&&&& r<00>generate_card_pngr~<00>s)<00><00> <16>M<EFBFBD>M<EFBFBD>*<2A>a<EFBFBD> (<28>E<EFBFBD><13>2<EFBFBD><05>:<3A><EFBFBD>H<EFBFBD><12>2<EFBFBD><05>:<3A><EFBFBD>H<EFBFBD><14>g<EFBFBD>(<28>(<28>3<EFBFBD>.<2E>%<25>7<>8<>J<EFBFBD><15>w<EFBFBD>*<2A>*<2A>S<EFBFBD>0<>E<EFBFBD>9<>:<3A>K<EFBFBD> <12>Y<EFBFBD>Y<EFBFBD>v<EFBFBD>
<EFBFBD>8<> 9<>F<EFBFBD> <14>><3E>><3E>&<26>&<26> )<29>D<EFBFBD><08>N<EFBFBD>N<EFBFBD>F<EFBFBD>Z<EFBFBD>5<>6<>=Q<>N<EFBFBD>R<><17> <1E> <1E> %<25> %<25><17><19><14>&<26><06><0F>h<EFBFBD>y<EFBFBD><19>  <0B><18><05><1A>%<25>%<25>
<EFBFBD> <15><1C> %<25> <1D>f<EFBFBD>U<EFBFBD> 3<> <17>7<EFBFBD> "<22> <1E>v<EFBFBD><05> =<3D> <17>6<EFBFBD> !<21> <1D>f<EFBFBD>U<EFBFBD> 3<><18> <12>Mr)rT) r[rr<00>ior+rrr7rMrir~<00>rr<00><module>r<>sI<00><01> <20> <09> <09><0F>!<21>(7<>.$A<01>N3O<01>l5?<3F>J<EFBFBD>XY<58>[_<>ab<61>dn<64>pq<70>Js<4A>+r