Redimensionnement de la transparence PNG avec SimpleImage.php Class
Je suis en utilisant une version modifiée de la SimpleImage.php catégorie: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
Les modifications que j'ai trouvé sur phpfreaks (http://www.phpfreaks.com/forums/index.php?topic=301811.0), mais quand je l'utilise, le png est redimensionnée, mais la transparence est noir.
Je fais l'appel comme:
$max_width = 200; //set a max width
$max_height = 150; //set a max height
if($imgW > $imgH){ //width is greater
//resize to width up to max
if($imgW > $max_width) $image->resizeToWidth($max_width);
}
else { //height is greater
//resize to height up to max
if($imgH > $max_height) $image->resizeToHeight($max_height);
}
$image->save($_SERVER['DOCUMENT_ROOT']."/path/" . $new_filename);
Je ne suis pas sûr de ce qu'il manque. Toute aide est appréciée...
class SimpleImage {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imageAlphaBlending($this->image, true);
imageSaveAlpha($this->image, true);
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
//ADDED CODE IS HERE - NOT SURE WHY IT DOESN'T WORK FOR PNG
//Setup new image
$new_image = imagecreatetruecolor($width, $height);
//These parameters are required for handling PNG files.
imagealphablending($new_image, false);
imagesavealpha($new_image,true);
$transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
//Resize image
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
source d'informationauteur Don
Vous devez vous connecter pour publier un commentaire.
Ont maintenant la transparence de travail pour PNG, mais pas gif. Voici les modifications aux fonctions spécifiques dans le cas où il aidera quelqu'un d'autre:
De La Fonction De Sauvegarde:
}
La Fonction De Redimensionnement
}
La fonction
imagecreatetruecolor()
ne fonctionne pas avec GIF. Utiliser leimagecreate
plutôt la méthode:Je n'ai pas joué avec GD pour une longue période de moi-même (je préfère Imagemagick), mais vous pouvez essayer de paramètre alpha sont également à la source de l'image avant de la copie:
HTH.
J'ai fait la même chose que dans ce https://stackoverflow.com/a/6401135/262462 mais modifié cette partie
à ce