问题
I have a lot of JPEG images that I want to convert to PNG images using PHP. The JPEGs are going to be uploaded by clients so I can't trust them to make sure they are in the right format.
I also want to make their white backgrounds transparent.
Does PHP have any functions I can use to achieve this?
回答1:
After a few days of trying different solutions and doing some more research, this is what I found worked for me.
$image = imagecreatefromjpeg( 'image.jpg' );
imagealphablending($image, true);
$transparentcolour = imagecolorallocate($image, 255,255,255);
imagecolortransparent($image, $transparentcolour)
The imagealphablending($image, true);
is important.
Using imagesavealpha($f, true);
as mentioned in a previous answer definitely doesn't work and seems to actually prevent you from making the background transparent...
To output the transparent image with the correct headers.
<?php
header( 'Content-Type: image/png' );
imagepng( $image, null, 1 );
?>
回答2:
$f = imagecreatefromjpeg('path.jpg');
$white = imagecolorallocate($f, 255,255,255);
imagecolortransparent($f, $white);
More details here
回答3:
This worked for me:
$image = imagecreatefromjpeg( "image.jpg" );
imagealphablending($image, true);
imagepng($image, "image.png");
回答4:
I found this solution at Convert jpg image to gif, png & bmp format using PHP
$imageObject = imagecreatefromjpeg($imageFile);
imagegif($imageObject, $imageFile . '.gif');
imagepng($imageObject, $imageFile . '.png');
imagewbmp($imageObject, $imageFile . '.bmp');
来源:https://stackoverflow.com/questions/7610128/use-php-to-convert-jpegs-to-transparent-png