Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>sorry for answering myself but this is the only working solution that I know of. It sets the color values of fully transparent pixels to the average of the surrounding non fully transparent pixels to minimize impact of fully transparent pixel colors while resizing. There are special cases where the proper result will not be achieved.</p> <p>It is very ugly and slow. I'd be happy to accept your answer if you can come up with something better.</p> <pre><code># might be possible to speed this up by only processing necessary pixels # using scipy dilate, numpy where import PIL.Image filename = "trans.png" # http://qrc-designer.com/stuff/trans.png size = (25,25) import numpy as np im = PIL.Image.open(filename) npImRgba = np.asarray(im, dtype=np.uint8) npImRgba2 = np.asarray(im, dtype=np.uint8) npImRgba2.flags.writeable = True lenY = npImRgba.shape[0] lenX = npImRgba.shape[1] for y in range(npImRgba.shape[0]): for x in range(npImRgba.shape[1]): if npImRgba[y, x, 3] != 0: # only change completely transparent pixels continue colSum = np.zeros((3), dtype=np.uint16) i = 0 for oy in [-1, 0, 1]: for ox in [-1, 0, 1]: if not oy and not ox: continue iy = y + oy if iy &lt; 0: continue if iy &gt;= lenY: continue ix = x + ox if ix &lt; 0: continue if ix &gt;= lenX: continue col = npImRgba[iy, ix] if not col[3]: continue colSum += col[:3] i += 1 npImRgba2[y, x, :3] = colSum / i im = PIL.Image.fromarray(npImRgba2) im = im.transform(size, PIL.Image.EXTENT, (0,0) + im.size, PIL.Image.LINEAR) im.save("slime_"+filename) </code></pre> <p>result: <img src="https://i.stack.imgur.com/1Aqk2.png" alt="enter image description here"></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload