 <p>The default resizing method used by <code>thumbnail</code> is NEAREST, which is a really bad choice. If you're resizing to 1/5 of the original size for example, it will output one pixel and throw out the next 4 - a one-pixel wide line has only a 1 out of 5 chance of showing up <em>at all</em> in the result!</p> <p>The surprising thing is that BILINEAR and BICUBIC aren't much better. They take a formula and apply it to the 2 or 3 closest pixels to the source point, but there's still lots of pixels they don't look at, and the formula will deemphasize the line anyway.</p> <p>The best choice is ANTIALIAS, which appears to take all of the original image into consideration without throwing away any pixels. The lines will become dimmer but they won't disappear entirely; you can do an extra step to improve the contrast if necessary.</p> <p>Note that all of these methods will fall back to NEAREST if you're working with a paletted image, i.e. <code>im.mode == 'P'</code>. You must always convert to 'RGB'.</p> <pre><code>from PIL import Image im = Image.open(fn) im = im.convert('RGB') im.thumbnail(size, Image.ANTIALIAS) </code></pre> <p>Here's an example taken from the electronics.stackexchange site <a href="http://electronics.stackexchange.com/questions/5412/easiest-and-best-poe-ethernet-chip-micro-design-for-diy-interface-with-custom-ard/5418#5418">http://electronics.stackexchange.com/questions/5412/easiest-and-best-poe-ethernet-chip-micro-design-for-diy-interface-with-custom-ard/5418#5418</a></p> <p>Using the default NEAREST algorithm, which I assume is similar to the results you had:</p> <p><img src="https://i.stack.imgur.com/mcmmd.png" alt="NEAREST"></p> <p>Using the ANTIALIAS algorithm:</p> <p><img src="https://i.stack.imgur.com/zgYAx.png" alt="ANTIALIAS"></p>