Solved

Maintain transparency of PNG image during upload

Posted on 2009-04-01
5
397 Views
Last Modified: 2012-06-22
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
Comment
Question by:sulentho
  • 2
5 Comments
 
LVL 5

Expert Comment

by:-null-
ID: 24036969
Hi

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

-null-
0
 
LVL 5

Expert Comment

by:-null-
ID: 24036982
um and you're jpeging a png:

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


Jpegs don't do transparency
0
 
LVL 14

Accepted Solution

by:
shobinsun earned 400 total points
ID: 24037090
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
 

Author Comment

by:sulentho
ID: 24037573
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

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now