• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 447
  • Last Modified:

Maintain transparency of PNG image during upload

I have a php scrip to upload PNG files but I am losing the transparency during the upload and it is giving the images by default a black BG. I am attaching a snippet of code I am using. I need to know how to modify the code to maintain the transparency of the images being uploaded. Thanks and any help will be appreciated.
if ($mimetype=="image/png") {
$i = imagecreatefrompng($temporary_name);
imagealphablending($i, true); // setting alpha blending on
imagesavealpha($i, true); // save alphablending setting (important)
$dest_x = $tx;
$dest_y = $ty;
if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
if (imagesx($i) >= imagesy($i)) {
$thumb_x = $dest_x;
$thumb_y = imagesy($i)*($dest_x/imagesx($i));
} else {
$thumb_x = imagesx($i)*($dest_y/imagesy($i));
$thumb_y = $dest_y;
}
} else {
$thumb_x = imagesx($i);
$thumb_y = imagesy($i);
}
$thumb = imagecreatetruecolor($thumb_x,$thumb_y);
imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y, imagesx($i), imagesy($i));
imagejpeg($thumb, $upload."/".$name."_".$un.".png", 9);
chmod($upload."/".$name."_".$un.".png", 0777);
$image_name=$name."_".$un.".png";
}

Open in new window

0
sulentho
Asked:
sulentho
  • 2
1 Solution
 
-null-Commented:
Hi

What browser are you using as <IE6 doesn't support transparent pngs and that might be throwing you off

-null-
0
 
-null-Commented:
um and you're jpeging a png:

imagejpeg($thumb, $upload."/".$name."_".$un.".png", 9);


Jpegs don't do transparency
0
 
shobinsunCommented:
Hello,

Here is an example code to create .png image with transparent effect.

Hope this code will help you.

Regards.
<?php
header("Content-type: image/png");
$image="powered_by.png";//this image is uloaded from the form
$im = imagecreatefrompng($image);
$bg_color = imagecolorat($im,1,1);
imagecolortransparent($im, $bg_color);
imagepng($im,"pics.png");
//ImagePNG($pic,"pics45.png");
imagedestroy($im);
 
?>

Open in new window

0
 
sulenthoAuthor Commented:
Hi Shobinsun,
I have attached the code that I am currently using but  what is happening is there is now a very slight whitish layer behind the image so it is actually not a 100% transparent. Can anyone let me know if there is anything I need to tweak in the code. I am attaching a file created from this script as an example.
function setTransparency($new_image,$image_source)
{
$transparencyIndex = imagecolortransparent($image_source);
$transparencyColor = array('red' => 255, 'green' => 255, 'blue' => 255);
if ($transparencyIndex >= 0) {
$transparencyColor    = imagecolorsforindex($image_source, $transparencyIndex);   
}
$transparencyIndex    = imagecolorallocate($new_image, $transparencyColor['red'], $transparencyColor['green'], $transparencyColor['blue']);
imagefill($new_image, 0, 0, $transparencyIndex);
imagecolortransparent($new_image, $transparencyIndex);
} 
 
function createUniqueImage($imagefile,$imagename,$tx,$ty,$upload) {
$token = md5(uniqid(rand(),1));
$un = substr($token, 0, 5);
$filename = $imagefile['name'];
$temporary_name = $imagefile['tmp_name'];
$mimetype = strtolower($imagefile['type']);
$split = explode(".", $filename);
$name=$imagename;
 
// .png file format
 
if ($mimetype=="image/png") {
$i = imagecreatefrompng($temporary_name);
$dest_x = $tx;
$dest_y = $ty;
if (imagesx($i) > $dest_x or imagesy($i) > $dest_y) {
if (imagesx($i) >= imagesy($i)) {
$thumb_x = $dest_x;
$thumb_y = imagesy($i)*($dest_x/imagesx($i));
} else {
$thumb_x = imagesx($i)*($dest_y/imagesy($i));
$thumb_y = $dest_y;
}
} else {
$thumb_x = imagesx($i);
$thumb_y = imagesy($i);
}
$thumb = imagecreatetruecolor($thumb_x,$thumb_y);
setTransparency($thumb,$i);
imagecopyresampled($thumb, $i ,0, 0, 0, 0, $thumb_x, $thumb_y, imagesx($i), imagesy($i));
imagepng($thumb, $upload."/".$name."_".$un.".png", 9);
chmod($upload."/".$name."_".$un.".png", 0777);
$image_name=$name."_".$un.".png";
}
}

Open in new window

fcvbweather-860b5.png
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now