TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   General (http://www.talkphp.com/general/)
-   -   Looking for transparency help (http://www.talkphp.com/general/3208-looking-transparency-help.html)

Jako 08-03-2008 12:56 AM

Looking for transparency help
 
I have a script I kind of tweaked which would resize my images, jpg, gif, or pngs. The script uploads a copy of the source and then a resized thumbnail.

Only issue is that the thumbnail of a png has a black background and I cant figure out how to keep the original transparency.

PHP Code:

<?php

  
########################################
  # include the getNextFilename function #
  ########################################
  
include('getNextFilename5.php'); // use getNextFilename4.php on a PHP 4 server
  ########################################
  
  // define constants
  
define('THUMBS_DIR''/home/golden/public_html/images/clubs/thumbs/');
  
define('MAX_WIDTH'120);
  
define('MAX_HEIGHT'90);
  
  
// process the uploaded image
  
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
    
$original $_FILES['image']['tmp_name'];
    
// begin by getting the details of the original
    
list($width$height$type) = getimagesize($original);
    
// calculate the scaling ratio
    
if ($width <= MAX_WIDTH && $height <= MAX_HEIGHT) {
      
$ratio 1;
      }
    elseif (
$width $height) {
      
$ratio MAX_WIDTH/$width;
      }
    else {
      
$ratio MAX_HEIGHT/$height;
      }
    
// strip the extension off the image filename
    
$imagetypes = array('/\.gif$/''/\.jpg$/''/\.jpeg$/''/\.png$/');
    
$name preg_replace($imagetypes''basename($_FILES['image']['name']));

    
########################################################
    # getNextFilename() requires the file type as a string #
    # so begin by converting it to a string assigned to $t #
    ########################################################
    
switch($type) {
      case 
1:
        
$t 'gif';
        break;
      case 
2:
        
$t 'jpg';
        break;
      case 
3:
        
$t 'png';
      }
    
################################
    # get new name for upload file #
    ################################
    
$newName getNextFilename5(UPLOAD_DIR$name$t);  // use getNextFilename4() on a PHP 4 server

    ################################################
    # use the new name instead of the existing one #
    ################################################
    // move the temporary file to the upload folder
    
$moved move_uploaded_file($originalUPLOAD_DIR.$newName);
    if (
$moved) {
      
$result "$newName successfully uploaded; ";
      
$original UPLOAD_DIR.$newName;
      }
    else {
      
$result 'Problem uploading '.$_FILES['image']['name'].'; ';
      }
    
################################################

    // create an image resource for the original
    
switch($type) {
      case 
1:
        
$source = @ imagecreatefromgif($original);
        if (!
$source) {
          
$result 'Cannot process GIF files. Please use JPEG or PNG.';
          }
        break;
      case 
2:
        
$source imagecreatefromjpeg($original);
        break;
      case 
3:
        
$source imagecreatefrompng($original);
        break;
      default:
        
$source NULL;
        
$result 'Cannot identify file type.';
      }
    
// make sure the image resource is OK
    
if (!$source) {
      
$result 'Problem copying original';
      }
    else {
      
// calculate the dimensions of the thumbnail
      
$thumb_width round($width $ratio);
      
$thumb_height round($height $ratio);
      
// create an image resource for the thumbnail
      
$thumb imagecreatetruecolor($thumb_width$thumb_height);
      
// create the resized copy
      
imagecopyresampled($thumb$source0000$thumb_width$thumb_height$width$height);
      
// save the resized copy
      
switch($type) {
        case 
1:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.gif');
          
######################################################
          
if (function_exists('imagegif')) {
            
$success imagegif($thumbTHUMBS_DIR.$name.'_thb.gif');
            
$thumb_name $name.'_thb.gif';
            }
          else {
            
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'50);
            
$thumb_name $name.'_thb.jpg';
            }
          break;
        case 
2:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.jpg');
          
######################################################
          
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'100);
          
$thumb_name $name.'_thb.jpg';
          break;
        case 
3:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.png');
          
######################################################
          
$success imagepng($thumbTHUMBS_DIR.$name.'_thb.png');
          
$thumb_name $name.'_thb.png';
        }
        if (
$success) {
          
$result .= "$thumb_name created";
          }
        else {
          
$result .= 'Problem creating thumbnail';
          }
      
// remove the image resources from memory
      
imagedestroy($source);
      
imagedestroy($thumb);
      }
    }
?>


buggabill 08-04-2008 03:54 PM

In order to preserve the translucency/transparency in a PNG file, you will need to make sure that you enable the alpha channel as follows...

PHP Code:

<?php

  
########################################
  # include the getNextFilename function #
  ########################################
  
include('getNextFilename5.php'); // use getNextFilename4.php on a PHP 4 server
  ########################################
  
  // define constants
  
define('THUMBS_DIR''/home/golden/public_html/images/clubs/thumbs/');
  
define('MAX_WIDTH'120);
  
define('MAX_HEIGHT'90);
  
  
// process the uploaded image
  
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
    
$original $_FILES['image']['tmp_name'];
    
// begin by getting the details of the original
    
list($width$height$type) = getimagesize($original);
    
// calculate the scaling ratio
    
if ($width <= MAX_WIDTH && $height <= MAX_HEIGHT) {
      
$ratio 1;
      }
    elseif (
$width $height) {
      
$ratio MAX_WIDTH/$width;
      }
    else {
      
$ratio MAX_HEIGHT/$height;
      }
    
// strip the extension off the image filename
    
$imagetypes = array('/\.gif$/''/\.jpg$/''/\.jpeg$/''/\.png$/');
    
$name preg_replace($imagetypes''basename($_FILES['image']['name']));

    
########################################################
    # getNextFilename() requires the file type as a string #
    # so begin by converting it to a string assigned to $t #
    ########################################################
    
switch($type) {
      case 
1:
        
$t 'gif';
        break;
      case 
2:
        
$t 'jpg';
        break;
      case 
3:
        
$t 'png';
      }
    
################################
    # get new name for upload file #
    ################################
    
$newName getNextFilename5(UPLOAD_DIR$name$t);  // use getNextFilename4() on a PHP 4 server

    ################################################
    # use the new name instead of the existing one #
    ################################################
    // move the temporary file to the upload folder
    
$moved move_uploaded_file($originalUPLOAD_DIR.$newName);
    if (
$moved) {
      
$result "$newName successfully uploaded; ";
      
$original UPLOAD_DIR.$newName;
      }
    else {
      
$result 'Problem uploading '.$_FILES['image']['name'].'; ';
      }
    
################################################

    // create an image resource for the original
    
switch($type) {
      case 
1:
        
$source = @ imagecreatefromgif($original);
        if (!
$source) {
          
$result 'Cannot process GIF files. Please use JPEG or PNG.';
          }
        break;
      case 
2:
        
$source imagecreatefromjpeg($original);
        break;
      case 
3:
        
$source imagecreatefrompng($original);
        
// enable alpha channnel in PNG file
        
imageAlphaBlending($sourcetrue);
        
imageSaveAlpha($sourcetrue);
        break;
      default:
        
$source NULL;
        
$result 'Cannot identify file type.';
      }
    
// make sure the image resource is OK
    
if (!$source) {
      
$result 'Problem copying original';
      }
    else {
      
// calculate the dimensions of the thumbnail
      
$thumb_width round($width $ratio);
      
$thumb_height round($height $ratio);
      
// create an image resource for the thumbnail
      
$thumb imagecreatetruecolor($thumb_width$thumb_height);
      
// create the resized copy
      
imagecopyresampled($thumb$source0000$thumb_width$thumb_height$width$height);
      
// save the resized copy
      
switch($type) {
        case 
1:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.gif');
          
######################################################
          
if (function_exists('imagegif')) {
            
$success imagegif($thumbTHUMBS_DIR.$name.'_thb.gif');
            
$thumb_name $name.'_thb.gif';
            }

          else {
            
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'50);
            
$thumb_name $name.'_thb.jpg';
            }
          break;
        case 
2:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.jpg');
          
######################################################
          
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'100);
          
$thumb_name $name.'_thb.jpg';
          break;
        case 
3:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.png');
          
######################################################
          
$success imagepng($thumbTHUMBS_DIR.$name.'_thb.png');
          
$thumb_name $name.'_thb.png';
        }
        if (
$success) {
          
$result .= "$thumb_name created";
          }
        else {
          
$result .= 'Problem creating thumbnail';
          }
      
// remove the image resources from memory
      
imagedestroy($source);
      
imagedestroy($thumb);
      }
    }
?>


Jako 08-04-2008 06:03 PM

Bill, I've added the new lines that you had and I still have a black background around my resized thumbnail.

Jako 08-04-2008 06:35 PM

I ended up getting it to work using..

PHP Code:

  /* making the new image transparent */
        
$background imagecolorallocate($thumb000);
        
ImageColorTransparent($thumb$background); // make the new temp image all transparent
        
imagealphablending($thumbfalse); // turn off the alpha blending to keep the alpha channel


      // create the resized copy
      
imagecopyresampled($thumb$source0000$thumb_width$thumb_height$width$height); 

But the colors seem a tad lighter in the new thumbnail? Is that just due to the resizing and keeping transparency?

buggabill 08-05-2008 06:12 PM

It may seem a little muted, because I think that the ImageColorTransparent() call will change all the blacks to transparent for the image.

I looked at this some more. Try changing the following.

php Code:
// Change this:
$thumb = imagecreatetruecolor($thumb_width, $thumb_height);

// To this:
$thumb = imagecreate($thumb_width, $thumb_height);

The reason is that imagecreatetruecolor returns an image resource with the background color as black. imagecreate will just return a blank image resource.

I tried this out on my machine with a png with some transparency it in. It seemed to work correctly.

PHP Code:

<?php

  
########################################
  # include the getNextFilename function #
  ########################################
  
include('getNextFilename5.php'); // use getNextFilename4.php on a PHP 4 server
  ########################################
  
  // define constants
  
define('THUMBS_DIR''/home/golden/public_html/images/clubs/thumbs/');
  
define('MAX_WIDTH'120);
  
define('MAX_HEIGHT'90);
 
  
// process the uploaded image
  
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
    
$original $_FILES['image']['tmp_name'];
    
// begin by getting the details of the original
    
list($width$height$type) = getimagesize($original);
    
// calculate the scaling ratio
    
if ($width <= MAX_WIDTH && $height <= MAX_HEIGHT) {
      
$ratio 1;
      }
    elseif (
$width $height) {
      
$ratio MAX_WIDTH/$width;
      }
    else {
      
$ratio MAX_HEIGHT/$height;
      }
    
// strip the extension off the image filename
    
$imagetypes = array('/\.gif$/''/\.jpg$/''/\.jpeg$/''/\.png$/');
    
$name preg_replace($imagetypes''basename($_FILES['image']['name']));

    
########################################################
    # getNextFilename() requires the file type as a string #
    # so begin by converting it to a string assigned to $t #
    ########################################################
    
switch($type) {
      case 
1:
        
$t 'gif';
        break;
      case 
2:
        
$t 'jpg';
        break;
      case 
3:
        
$t 'png';
      }
    
################################
    # get new name for upload file #
    ################################
    
$newName getNextFilename5(UPLOAD_DIR$name$t);  // use getNextFilename4() on a PHP 4 server

    ################################################
    # use the new name instead of the existing one #
    ################################################
    // move the temporary file to the upload folder
    
$moved move_uploaded_file($originalUPLOAD_DIR.$newName);
    if (
$moved) {
      
$result "$newName successfully uploaded; ";
      
$original UPLOAD_DIR.$newName;
      }
    else {
      
$result 'Problem uploading '.$_FILES['image']['name'].'; ';
      }
    
################################################

    // create an image resource for the original
    
switch($type) {
      case 
1:
        
$source = @ imagecreatefromgif($original);
        if (!
$source) {
          
$result 'Cannot process GIF files. Please use JPEG or PNG.';
          }
        break;
      case 
2:
        
$source imagecreatefromjpeg($original);
        break;
      case 
3:
        
$source imagecreatefrompng($original);     
        break;
      default:
        
$source NULL;
        
$result 'Cannot identify file type.';
      }
    
// make sure the image resource is OK
    
if (!$source) {
      
$result 'Problem copying original';
      }
    else {
      
// calculate the dimensions of the thumbnail
      
$thumb_width round($width $ratio);
      
$thumb_height round($height $ratio);
      
// create an image resource for the thumbnail
      
$thumb imagecreate($thumb_width$thumb_height);
      
// create the resized copy
      
imagecopyresampled($thumb$source0000$thumb_width$thumb_height$width$height);
      
// save the resized copy
      
switch($type) {
        case 
1:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.gif');
          
######################################################
          
if (function_exists('imagegif')) {
            
$success imagegif($thumbTHUMBS_DIR.$name.'_thb.gif');
            
$thumb_name $name.'_thb.gif';
            }

          else {
            
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'50);
            
$thumb_name $name.'_thb.jpg';
            }
          break;
        case 
2:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.jpg');
          
######################################################
          
$success imagejpeg($thumbTHUMBS_DIR.$name.'_thb.jpg'100);
          
$thumb_name $name.'_thb.jpg';
          break;
        case 
3:
          
######################################################
          # use the new name as the basis for the thumb's name #
          ######################################################
          
$name basename($newName'.png');
          
######################################################
          
$success imagepng($thumbTHUMBS_DIR.$name.'_thb.png');
          
$thumb_name $name.'_thb.png';
        }
        if (
$success) {
          
$result .= "$thumb_name created";
          }
        else {
          
$result .= 'Problem creating thumbnail';
          }
      
// remove the image resources from memory
      
imagedestroy($source);
      
imagedestroy($thumb);
      }
    }
?>



All times are GMT. The time now is 12:55 PM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0