mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-24 12:49:03 -05:00
chore: minify the svg logos
svgo drops the editor markup, and the PNG inside RetroDECK's icon is cut to the 80 px tile: 12.7 KB down to 5.1 KB.
This commit is contained in:
1 parent
e14f935994
commit
86f9bda4ef
4 files changed
+47
-103
No files matched your search
@@ -1,36 +1 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256">
|
||||
<desc iVinci="yes" version="4.6" gridStep="20" showGrid="no" snapToGrid="no" codePlatform="0"/>
|
||||
<g id="Layer1" name="Layer 1" opacity="1">
|
||||
<g id="Shape1">
|
||||
<desc shapeID="1" type="0" basicInfo-basicType="0" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-100,-68.4834,200,136.967)" text="" font-familyName="" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.97865,0.000512411,-0.000512419,0.978665,127.968,189.029)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath1" d="M42.4218,126.285 C31.8374,138.147 30.1561,145.569 30.1211,180.592 L30.0933,207.544 L57.0444,207.544 C92.0585,207.546 99.4913,205.871 111.351,195.312 L115.663,191.473 L115.875,219.601 C116.075,246.152 116.172,247.872 117.614,250.268 C122.501,258.388 134.847,257.846 138.714,249.344 C140.016,246.481 140.14,243.872 140.169,218.818 L140.2,191.423 L144.543,195.298 C156.43,205.904 163.834,207.583 198.872,207.618 L225.823,207.646 L225.824,180.695 C225.825,145.671 224.152,138.248 213.58,126.374 L209.729,122.05 L205.287,125.079 C197.219,130.58 186.766,134.179 178.77,134.208 L175.641,134.22 L173.613,139.379 C157.212,181.089 98.7321,181.059 82.3753,139.332 L80.3521,134.17 L77.2234,134.155 C69.2279,134.117 58.7787,130.507 50.7166,124.998 L46.277,121.964 L42.4218,126.285 Z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1;"/>
|
||||
</g>
|
||||
<g id="Shape2">
|
||||
<desc shapeID="2" type="0" basicInfo-basicType="1" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-83.0229,-25.7162,166.046,51.4324)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.984273,0.000515356,-0.000585224,1.11771,127.988,150.75)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath2" d="M46.2859,121.964 L209.72,122.049 L209.69,179.536 L46.2558,179.451 L46.2859,121.964 Z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer2" name="Layer 4" opacity="1">
|
||||
<g id="Shape3">
|
||||
<desc shapeID="3" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-50.2318,-49.7682,100.464,99.5363)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.974133,0.000510046,-0.000514806,0.983224,79.09,84.9615)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath3" d="M30.1575,84.9359 C30.1717,57.9108 52.091,36.0141 79.1156,36.0283 C106.14,36.0424 128.037,57.962 128.023,84.9871 C128.008,112.012 106.089,133.909 79.0644,133.895 C52.0397,133.881 30.1434,111.961 30.1575,84.9359 Z" style="stroke:none;fill-rule:evenodd;fill:#d35400;fill-opacity:1;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer3" name="Layer 2" opacity="1">
|
||||
<g id="Shape4">
|
||||
<desc shapeID="4" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-48.9954,-49.7682,97.9908,99.5364)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.998716,0.000522918,-0.000514806,0.983223,176.955,85.6138)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath4" d="M128.022,85.5882 C128.036,58.5631 149.956,36.6664 176.98,36.6806 C204.005,36.6947 225.901,58.6144 225.887,85.6394 C225.873,112.665 203.954,134.561 176.929,134.547 C149.904,134.533 128.008,112.613 128.022,85.5882 Z" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1;"/>
|
||||
</g>
|
||||
<g id="Shape5">
|
||||
<desc shapeID="5" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-48.9954,-49.7682,97.9908,99.5364)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.998716,0.000522918,-0.000514806,0.983223,128.003,121.592)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath5" d="M79.0707,121.567 C79.0849,94.5417 101.004,72.645 128.029,72.6592 C155.054,72.6733 176.95,94.593 176.936,121.618 C176.922,148.643 155.002,170.54 127.978,170.526 C100.953,170.512 79.0566,148.592 79.0707,121.567 Z" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer4" name="Layer 3" opacity="1">
|
||||
<g id="Shape6">
|
||||
<desc shapeID="6" type="0" basicInfo-basicType="4" basicInfo-roundedRectRadius="12" basicInfo-polygonSides="6" basicInfo-starPoints="5" bounding="rect(-50.2318,-49.7682,100.464,99.5363)" text="" font-familyName="Helvetica" font-pixelSize="20" font-bold="0" font-underline="0" font-alignment="1" strokeStyle="0" markerStart="0" markerEnd="0" shadowEnabled="0" shadowOffsetX="0" shadowOffsetY="2" shadowBlur="4" shadowOpacity="160" blurEnabled="0" blurRadius="4" transform="matrix(0.974133,0.000510046,-0.000514806,0.983224,128.041,48.9845)" pers-center="0,0" pers-size="0,0" pers-start="0,0" pers-end="0,0" locked="0" mesh="" flag=""/>
|
||||
<path id="shapePath6" d="M79.1089,48.9588 C79.123,21.9338 101.042,0.0370636 128.067,0.0512276 C155.092,0.0653763 176.988,21.985 176.974,49.0101 C176.96,76.0352 155.04,97.9319 128.016,97.9177 C100.991,97.9036 79.0947,75.9839 79.1089,48.9588 Z" style="stroke:none;fill-rule:evenodd;fill:#f1c40f;fill-opacity:1;"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path d="M42.422 126.285c-10.585 11.862-12.266 19.284-12.3 54.307l-.029 26.952h26.951c35.015.002 42.447-1.673 54.307-12.232l4.312-3.839.212 28.128c.2 26.551.297 28.271 1.739 30.667 4.887 8.12 17.233 7.578 21.1-.924 1.302-2.863 1.426-5.472 1.455-30.526l.031-27.395 4.343 3.875c11.887 10.606 19.291 12.285 54.329 12.32l26.951.028.001-26.951c.001-35.024-1.672-42.447-12.244-54.321l-3.851-4.324-4.442 3.029c-8.068 5.501-18.521 9.1-26.517 9.129l-3.129.012-2.028 5.159c-16.401 41.71-74.88 41.68-91.238-.047l-2.023-5.162-3.129-.015c-7.995-.038-18.444-3.648-26.506-9.157l-4.44-3.034z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1"/><path d="m46.286 121.964 163.434.085-.03 57.487-163.434-.085z" style="stroke:none;fill-rule:evenodd;fill:#2ecc71;fill-opacity:1"/><path d="M30.158 84.936c.014-27.025 21.933-48.922 48.958-48.908s48.921 21.934 48.907 48.96c-.015 27.024-21.934 48.921-48.959 48.907-27.024-.014-48.92-21.934-48.906-48.96" style="stroke:none;fill-rule:evenodd;fill:#d35400;fill-opacity:1"/><path d="M128.022 85.588c.014-27.025 21.934-48.922 48.958-48.907 27.025.014 48.921 21.933 48.907 48.958-.014 27.026-21.933 48.922-48.958 48.908s-48.921-21.934-48.907-48.959" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1"/><path d="M79.07 121.567c.015-27.025 21.934-48.922 48.959-48.908s48.921 21.934 48.907 48.959-21.934 48.922-48.958 48.908c-27.025-.014-48.921-21.934-48.907-48.959" style="stroke:none;fill-rule:evenodd;fill:#e67e22;fill-opacity:1"/><path d="M79.109 48.959C79.123 21.934 101.042.037 128.067.05s48.921 21.934 48.907 48.96c-.014 27.024-21.934 48.92-48.958 48.907-27.025-.014-48.921-21.934-48.907-48.96" style="stroke:none;fill-rule:evenodd;fill:#f1c40f;fill-opacity:1"/></svg>
|
||||
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,12 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 48 48">
|
||||
<!-- Generator: Adobe Illustrator 29.0.1, SVG Export Plug-In . SVG Version: 2.1.0 Build 192) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #2f2f2f;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path id="Invader" class="st0" d="M15.2214499,30.6589508l1.8361292-2.0981903-2.6117897-.00597c-1.4364796-.0032806-2.6114798-.0085793-2.6111097-.0117493.0002804-.00317.1577702-.6325893.3497696-1.3986893l.3491001-1.3929195h-5.60711l.9638901-3.8554993.9638901-3.8554993h2.0806599l-.5253801,2.0981903c-.2889605,1.1540108-.5256901,2.1008396-.5260696,2.1040707-.0002804.0032196.7925396.0058899,1.7620497.0058899h1.7627401l.0164003-.0646496c.0090303-.0355606.2452698-.9797401.5249901-2.0981903l.5085897-2.0335407,5.0112696-.0235004-1.0804691-1.32827c-.5942593-.7305498-1.1016502-1.3573599-1.1275406-1.3929195l-.0470695-.0646496h2.0714703l1.22439,1.3987999,1.22439,1.3987999h4.5306797l1.22439-1.3987999,1.22439-1.3987999h2.0714703l-.0470695.0646496c-.0258808.0355597-.5332794.6623697-1.1275406,1.3929195l-1.0804691,1.32827,5.0112686.0235004.5085907,2.0335407c.2797203,1.1184502.5159683,2.0626392.5249901,2.0981903l.0163994.0646496h1.7627411c.9695091,0,1.7624283-.0025196,1.7620506-.0058899-.0002785-.0032196-.2371101-.9500599-.5260696-2.1040707l-.5253792-2.0981903h2.0806618l.9638901,3.8554993.9638901,3.8554993h-5.6071091l.3490982,1.3929195c.1920013.7660999.3493996,1.3955193.3497696,1.3986893.0002785.00317-1.1746292.0084705-2.6111107.0117493l-2.6117802.00597,1.8361301,2.0981903,1.8361397,2.0981903-3.185791-.0028-1.7044106-2.1022892-1.7044201-2.1022892h-8.0401287l-1.7044201,2.1022892-1.7044106,2.1022892-3.1857901.0028,1.8361588-2.0981903ZM19.9799404,21.8959103v-1.7514305h-3.5263691l-.0060806,1.7279205c-.0033398.9503593-.0011196,1.7412205.0051899,1.7574596.0089397.0234108.37533.0282898,1.7692699.0235004l1.7579899-.0060291v-1.751421ZM31.5464401,20.1444798l-3.5146198-.0120602v3.5269699l3.5146198-.0120602v-3.5028496Z"/>
|
||||
</svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="m15.221 30.659 1.837-2.098-2.612-.006a297 297 0 0 1-2.611-.012c0-.003.157-.633.35-1.399l.349-1.393H6.926l.964-3.855.964-3.856h2.08l-.525 2.099-.526 2.104c0 .003.793.006 1.762.006h1.763l.017-.065.525-2.098.508-2.034 5.011-.023-1.08-1.329a204 204 0 0 1-1.128-1.392l-.047-.065h2.072l1.224 1.399 1.225 1.398h4.53l1.225-1.398 1.224-1.4h2.072l-.047.066c-.026.035-.534.662-1.128 1.392l-1.08 1.329 5.01.023.51 2.034.524 2.098.017.065h1.762c.97 0 1.763-.003 1.763-.006l-.527-2.104-.525-2.099h2.08l.965 3.856.964 3.855h-5.608l.35 1.393.35 1.399c0 .003-1.175.009-2.612.012l-2.612.006 1.837 2.098 1.836 2.098-3.186-.003-1.705-2.102-1.704-2.102h-8.04l-1.705 2.102-1.704 2.102-3.186.003zm4.759-8.763v-1.752h-3.526l-.007 1.728c-.003.95 0 1.742.006 1.758.009.023.375.028 1.769.023l1.758-.006zm11.566-1.752-3.514-.012v3.527l3.514-.012z" style="fill:#2f2f2f"/></svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 917 B |
@@ -1,53 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="100%"
|
||||
height="100%"
|
||||
viewBox="0 0 1067 1067"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
|
||||
id="svg2"
|
||||
sodipodi:docname="rd-stable-icon.svg"
|
||||
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="1.7469541"
|
||||
inkscape:cx="533.78621"
|
||||
inkscape:cy="533.5"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2082"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2" /><g
|
||||
id="g1"><path
|
||||
d="M1066.66,266.666c-0,-147.176 -119.49,-266.666 -266.666,-266.666l-533.333,-0c-147.176,-0 -266.666,119.49 -266.666,266.666l-0,533.333c-0,147.176 119.49,266.666 266.666,266.666l533.333,-0c147.176,-0 266.666,-119.49 266.666,-266.666l-0,-533.333Z"
|
||||
style="fill:#000000"
|
||||
id="path1" /></g><g
|
||||
id="g2"><g
|
||||
id="D"><path
|
||||
d="M847.457,876.335c-18.448,18.448 -38.862,32.56 -61.237,42.335c-22.369,9.775 -46.705,14.662 -73.001,14.662l-430.192,0l-0,-110.487l430.192,-0c9.775,-0 18.965,-1.825 27.569,-5.473c8.605,-3.649 16.107,-8.673 22.512,-15.078c6.399,-6.399 11.429,-13.907 15.077,-22.511c3.649,-8.605 5.473,-17.794 5.473,-27.57l0,-437.756c0,-9.088 -2,-17.863 -5.99,-26.331c-3.995,-8.468 -9.263,-15.97 -15.799,-22.511c-6.542,-6.541 -14.043,-11.81 -22.512,-15.799c-8.468,-3.996 -17.248,-5.991 -26.33,-5.991l-430.192,0l-0,-110.487l430.192,-0c13.077,-0 25.779,1.375 38.1,4.126c12.322,2.756 24.166,6.643 35.521,11.673c11.36,5.024 22.136,11.048 32.326,18.067c10.184,7.024 19.618,14.731 28.291,23.131c18.039,17.487 32.048,37.623 42.028,60.407c9.979,22.79 14.975,47.398 14.975,73.836l-0,417.514c-0,26.438 -4.888,50.808 -14.663,73.109c-9.781,22.306 -23.892,42.681 -42.34,61.134Z"
|
||||
style="fill:#fff;fill-rule:nonzero;"
|
||||
id="path2" /></g><use
|
||||
xlink:href="#_Image1"
|
||||
x="159.95"
|
||||
y="366.372"
|
||||
width="441px"
|
||||
height="334px"
|
||||
id="use2" /></g><defs
|
||||
id="defs2"><image
|
||||
id="_Image1"
|
||||
width="441px"
|
||||
height="334px"
|
||||
xlink:href="data:image/png;base64,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 truncated
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 1067 1067"><path d="M1066.66 266.666C1066.66 119.49 947.17 0 799.994 0H266.661C119.485 0-.005 119.49-.005 266.666v533.333c0 147.176 119.49 266.666 266.666 266.666h533.333c147.176 0 266.666-119.49 266.666-266.666z" style="fill:#000"/><path d="M847.457 876.335q-27.673 27.672-61.237 42.335-33.555 14.662-73.001 14.662H283.027V822.845h430.192q14.663 0 27.569-5.473t22.512-15.078c6.399-6.399 11.429-13.907 15.077-22.511q5.473-12.907 5.473-27.57V314.457c0-9.088-2-17.863-5.99-26.331q-5.994-12.7-15.799-22.511c-6.542-6.541-14.043-11.81-22.512-15.799-8.468-3.996-17.248-5.991-26.33-5.991H283.027V133.338h430.192q19.617 0 38.1 4.126c12.322 2.756 24.166 6.643 35.521 11.673a198 198 0 0 1 32.326 18.067c10.184 7.024 19.618 14.731 28.291 23.131q27.058 26.23 42.028 60.407c9.979 22.79 14.975 47.398 14.975 73.836v417.514q0 39.657-14.663 73.109c-9.781 22.306-23.892 42.681-42.34 61.134" style="fill:#fff;fill-rule:nonzero"/><use xlink:href="#a" width="441" height="334" x="159.95" y="366.372"/><defs><image xlink:href="data:image/png;base64,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 truncated
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.0 KiB |
@@ -10,7 +10,8 @@ them. The site build only reads those copies (``sitediagrams.localize_images``).
|
||||
|
||||
Raster logos are normalised to an 80 px square WebP, twice the 40 px they
|
||||
are shown at, and system icons to a 48 px PNG, so every tile has the same
|
||||
weight. SVG is kept as published.
|
||||
weight. SVG is minified by svgo, and a raster an SVG embeds is cut to the
|
||||
tile size.
|
||||
Normalising needs Pillow. This is a maintenance tool run by hand when a
|
||||
logo changes, not a build step: the build stays on the standard library
|
||||
and PyYAML.
|
||||
@@ -22,8 +23,11 @@ and PyYAML.
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import base64
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
@@ -79,6 +83,44 @@ def safe_svg(data: bytes, url: str) -> bytes:
|
||||
return data
|
||||
|
||||
|
||||
# A raster inside an SVG logo: RetroDECK's icon carried a 441 x 334 PNG,
|
||||
# 9 KiB of a mark drawn 40 px wide. It never needs more pixels than the
|
||||
# whole tile.
|
||||
EMBEDDED_RASTER = re.compile(rb'data:image/(?:png|jpeg|webp);base64,([A-Za-z0-9+/=\s]+)')
|
||||
|
||||
|
||||
def shrink_embedded(data: bytes) -> bytes:
|
||||
"""Each raster an SVG embeds, at most LOGO_SIZE pixels on its longest side."""
|
||||
|
||||
def shrink(match: re.Match[bytes]) -> bytes:
|
||||
try:
|
||||
from PIL import Image
|
||||
except ImportError as exc:
|
||||
raise SystemExit("Pillow is needed to normalise raster images: pip install Pillow") from exc
|
||||
image = Image.open(io.BytesIO(base64.b64decode(re.sub(rb"\s", b"", match.group(1))))).convert("RGBA")
|
||||
if max(image.size) <= LOGO_SIZE:
|
||||
return match.group(0)
|
||||
image.thumbnail((LOGO_SIZE, LOGO_SIZE), Image.LANCZOS)
|
||||
out = io.BytesIO()
|
||||
image.save(out, "PNG", optimize=True)
|
||||
return b"data:image/png;base64," + base64.b64encode(out.getvalue())
|
||||
|
||||
return EMBEDDED_RASTER.sub(shrink, data)
|
||||
|
||||
|
||||
# Editor markup (Inkscape's namedview, sodipodi attributes, metadata) was
|
||||
# most of the bytes of two logos. svgo comes with the site's packages.
|
||||
SVGO = ROOT / "website" / "node_modules" / ".bin" / "svgo"
|
||||
|
||||
|
||||
def minify_svg(data: bytes) -> bytes:
|
||||
if not SVGO.is_file():
|
||||
raise SystemExit("svgo is needed to minify SVG logos: npm ci --prefix website")
|
||||
result = subprocess.run([str(SVGO), "--multipass", "-i", "-", "-o", "-"],
|
||||
input=data, capture_output=True, check=True)
|
||||
return result.stdout
|
||||
|
||||
|
||||
def write_manifest(directory: Path, note: str, entries: list[dict]) -> None:
|
||||
entries.sort(key=lambda entry: entry["file"])
|
||||
document = {"note": note, "images": entries}
|
||||
@@ -101,7 +143,7 @@ def fetch_logos() -> None:
|
||||
download = f"{url}?s={LOGO_SIZE * 2}" if AVATAR_HOST in url else url
|
||||
data = fetch(download)
|
||||
if is_svg(data):
|
||||
file_name, payload = f"{name}.svg", safe_svg(data, url)
|
||||
file_name, payload = f"{name}.svg", minify_svg(shrink_embedded(safe_svg(data, url)))
|
||||
else:
|
||||
file_name, payload = f"{name}.webp", square_image(data, LOGO_SIZE, "WEBP")
|
||||
for stale in LOGO_DIR.glob(f"{name}.*"):
|
||||
|
||||
Reference in new issue
Block a user