Make WordPress Core

Opened 20 years ago

Closed 16 years ago

Last modified 13 years ago

#2805 closed defect (bug) (fixed)

Preserve PNG transparency/alpha during thumbnail creation

Reported by: Libertus Owned by: westi
Priority: high Milestone: 2.5
Component: Administration Version: 3.0.4
Severity: major Keywords:
Cc: Focuses:

Description

PNG images with transparent backgrounds get thumbnails with black backgrounds. This patch to wp_create_thumbmail() fixes that.

Attachments (4)

wp_create_thumbnail-preserve-PNG-transparency.diff (1.2 KB ) - added by Libertus 20 years ago.
the patch
wp_create_thumbnail-preserve-PNG-transparency-ideal.diff (1.3 KB ) - added by Libertus 20 years ago.
same patch but with function return value changed
2805.diff (757 bytes ) - added by Otto42 19 years ago.
Simpler patch
test_pngs_8-32_bit.zip (18.7 KB ) - added by anonymized_7341632 16 years ago.
It contains 2 PNG files exported from Fireworks at 8bit and 32bit

Download all attachments as: .zip

Change History (17)

#1 @Libertus
20 years ago

My ideal patch incorporates the return value change I mention on #2682

@Libertus
20 years ago

same patch but with function return value changed

#2 @Nazgul
19 years ago

  • Resolutionwontfix
  • Status newclosed

No traction in almost a year, so closing as wontfix.

Feel free to re-open it if you have additional information/suggestions/patches/...

#3 @jberthon
19 years ago

  • Resolution wontfix
  • Status closedreopened

I really wish this will be fixed!! This is really sad that WP lost the transparency in the PNG... Why can't it be integrated into WP main code?
I have to do and redo the modification at each update!! :-(

After the line 2294 of this file: http://trac.wordpress.org/browser/tags/2.2.1/wp-admin/admin-functions.php
add the following lines:

if ( ( $type[2] == 3) AND ( function_exists( 'imagesavealpha' ) ) ) {

imagesavealpha( $thumbnail, TRUE );
$trans_colour = imagecolorallocatealpha($thumbnail, 0, 0, 0, 127);
imagefill($thumbnail, 0, 0, $trans_colour);

}

This code was taken from this documentation page: http://fr.php.net/manual/en/function.imagecreatetruecolor.php

#4 @foolswisdom
19 years ago

  • Milestone2.4 (future)

@Otto42
19 years ago

Simpler patch

#5 @Otto42
19 years ago

  • Milestone 2.4 (future)2.3 (trunk)

Uploaded a simpler patch which should do the trick for trunk. Somebody test it out.

This does need to be in trunk, IMO. Uploading transparent PNG files only to have it mangle their thumbnails is a pretty bad user experience. This is a simple patch that just sets some flags in the GD functions if those flags are available.

#6 @westi
19 years ago

  • Keywords has-patch needs-testing added
  • Severity normalmajor

While I agree I would like to see this in 2.3.

It needs some testing before it can go in.

#7 @ryan
19 years ago

  • Priority normalhigh

#8 @Otto42
19 years ago

If anybody else wants to test, a bunch of transparent png's to test with can be found here:
http://entropymine.com/jason/testbed/pngtrans/

#9 @westi
19 years ago

  • Owner changed from anonymous to westi
  • Status reopenednew

#10 @westi
19 years ago

  • Resolutionfixed
  • Status newclosed

(In [6439]) Preserve PNG transparency/alpha during thumbnail creation. Fixes #2805 props Libertus/Otto42.

@anonymized_7341632
16 years ago

It contains 2 PNG files exported from Fireworks at 8bit and 32bit

#11 in reply to: ↑ description @anonymized_7341632
16 years ago

  • Keywords has-patch needs-testing removed
  • Resolution fixed
  • Status closedreopened
  • Version 2.13.0.4

The solution doesn't work for 8 bit PNGs. I attached the two files I encountered the problem with, in a ZIP.

#12 @Otto42
16 years ago

  • Resolutionfixed
  • Status reopenedclosed

That's actually a problem with the GD library and also that 8-bit PNGs are palletized. No programmatic solution can create transparent 8-bit PNG files properly.

Use 24-bit PNGs if you want transparency to be preserved.

#13 @harimaliya
13 years ago

That's problem with GD library.fixed with more then 8-bit PNGs.

Note: See TracTickets for help on using tickets.