Fix conversion of images
This commit is contained in:
parent
92c1022b8e
commit
39f7d0bed8
@ -182,10 +182,13 @@ function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0,
|
||||
|
||||
$filetoread = realpath(dol_osencode($file)); // Chemin canonique absolu de l'image
|
||||
|
||||
$infoImg = getimagesize($filetoread); // Recuperation des infos de l'image
|
||||
$infoImg = getimagesize($filetoread); // Get data about src image
|
||||
$imgWidth = $infoImg[0]; // Largeur de l'image
|
||||
$imgHeight = $infoImg[1]; // Hauteur de l'image
|
||||
|
||||
$imgTargetName = ($filetowrite ? $filetowrite : $file);
|
||||
$infoImgTarget = getimagesize($imgTargetName); // Get data about target image
|
||||
|
||||
if ($mode == 0) { // If resize, we check parameters
|
||||
if (!empty($filetowrite) && $filetowrite != $file && $newWidth <= 0 && $newHeight <= 0) {
|
||||
$newWidth = $imgWidth;
|
||||
@ -214,93 +217,86 @@ function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0,
|
||||
case 4: // IMG_WBMP
|
||||
$imgfonction = 'imagecreatefromwbmp';
|
||||
break;
|
||||
case 17: // IMG_WBMP
|
||||
case 17: // IMG_WBMP
|
||||
$imgfonction = 'imagecreatefromwebp';
|
||||
break;
|
||||
}
|
||||
if ($imgfonction) {
|
||||
if (!function_exists($imgfonction)) {
|
||||
// Fonctions de conversion non presente dans ce PHP
|
||||
return 'Resize not possible. This PHP does not support GD functions '.$imgfonction;
|
||||
return 'Read of image not possible. This PHP does not support GD functions '.$imgfonction;
|
||||
}
|
||||
}
|
||||
|
||||
// Initialisation des variables selon l'extension de l'image
|
||||
// Read source image file
|
||||
switch ($infoImg[2]) {
|
||||
case 1: // Gif
|
||||
$img = imagecreatefromgif($filetoread);
|
||||
$extImg = '.gif'; // File name extension of image
|
||||
$newquality = 'NU'; // Quality is not used for this format
|
||||
break;
|
||||
case 2: // Jpg
|
||||
$img = imagecreatefromjpeg($filetoread);
|
||||
$extImg = '.jpg';
|
||||
$newquality = ($newquality ? $newquality : '100'); // % quality maximum
|
||||
break;
|
||||
case 3: // Png
|
||||
$img = imagecreatefrompng($filetoread);
|
||||
$extImg = '.png';
|
||||
$newquality = 0; // No compression (0-9)
|
||||
break;
|
||||
case 4: // Bmp
|
||||
$img = imagecreatefromwbmp($filetoread);
|
||||
$extImg = '.bmp';
|
||||
$newquality = 'NU'; // Quality is not used for this format
|
||||
break;
|
||||
case 18: // Webp
|
||||
$img = imagecreatefromwebp($filetoread);
|
||||
$extImg = '.webp';
|
||||
$newquality = ($newquality ? $newquality : '100'); // % quality maximum
|
||||
break;
|
||||
}
|
||||
|
||||
// Create empty image
|
||||
// Create empty image for target
|
||||
if ($infoImg[2] == 1) {
|
||||
// Compatibilite image GIF
|
||||
$imgThumb = imagecreate($newWidth, $newHeight);
|
||||
// Compatibility image GIF
|
||||
$imgTarget = imagecreate($newWidth, $newHeight);
|
||||
} else {
|
||||
$imgThumb = imagecreatetruecolor($newWidth, $newHeight);
|
||||
$imgTarget = imagecreatetruecolor($newWidth, $newHeight);
|
||||
}
|
||||
|
||||
// Activate antialiasing for better quality
|
||||
if (function_exists('imageantialias')) {
|
||||
imageantialias($imgThumb, true);
|
||||
imageantialias($imgTarget, true);
|
||||
}
|
||||
|
||||
// This is to keep transparent alpha channel if exists (PHP >= 4.2)
|
||||
if (function_exists('imagesavealpha')) {
|
||||
imagesavealpha($imgThumb, true);
|
||||
imagesavealpha($imgTarget, true);
|
||||
}
|
||||
|
||||
// Initialisation des variables selon l'extension de l'image
|
||||
switch ($infoImg[2]) {
|
||||
case 1: // Gif
|
||||
$trans_colour = imagecolorallocate($imgThumb, 255, 255, 255); // On procede autrement pour le format GIF
|
||||
imagecolortransparent($imgThumb, $trans_colour);
|
||||
$trans_colour = imagecolorallocate($imgTarget, 255, 255, 255); // On procede autrement pour le format GIF
|
||||
imagecolortransparent($imgTarget, $trans_colour);
|
||||
break;
|
||||
case 2: // Jpg
|
||||
$trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0);
|
||||
$trans_colour = imagecolorallocatealpha($imgTarget, 255, 255, 255, 0);
|
||||
break;
|
||||
case 3: // Png
|
||||
imagealphablending($imgThumb, false); // Pour compatibilite sur certain systeme
|
||||
$trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 127); // Keep transparent channel
|
||||
imagealphablending($imgTarget, false); // Pour compatibilite sur certain systeme
|
||||
$trans_colour = imagecolorallocatealpha($imgTarget, 255, 255, 255, 127); // Keep transparent channel
|
||||
break;
|
||||
case 4: // Bmp
|
||||
$trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0);
|
||||
$trans_colour = imagecolorallocatealpha($imgTarget, 255, 255, 255, 0);
|
||||
break;
|
||||
case 18: // Webp
|
||||
$trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 127);
|
||||
$trans_colour = imagecolorallocatealpha($imgTarget, 255, 255, 255, 127);
|
||||
break;
|
||||
}
|
||||
if (function_exists("imagefill")) {
|
||||
imagefill($imgThumb, 0, 0, $trans_colour);
|
||||
imagefill($imgTarget, 0, 0, $trans_colour);
|
||||
}
|
||||
|
||||
dol_syslog("dol_imageResizeOrCrop: convert image from ($imgWidth x $imgHeight) at position ($src_x x $src_y) to ($newWidth x $newHeight) as $extImg, newquality=$newquality");
|
||||
//imagecopyresized($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight); // Insere l'image de base redimensionnee
|
||||
imagecopyresampled($imgThumb, $img, 0, 0, $src_x, $src_y, $newWidth, $newHeight, ($mode == 0 ? $imgWidth : $newWidth), ($mode == 0 ? $imgHeight : $newHeight)); // Insere l'image de base redimensionnee
|
||||
|
||||
$imgTargetName = ($filetowrite ? $filetowrite : $file);
|
||||
dol_syslog("dol_imageResizeOrCrop: convert image from ($imgWidth x $imgHeight) at position ($src_x x $src_y) to ($newWidth x $newHeight) as $extImg");
|
||||
//imagecopyresized($imgTarget, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight); // Insere l'image de base redimensionnee
|
||||
imagecopyresampled($imgTarget, $img, 0, 0, $src_x, $src_y, $newWidth, $newHeight, ($mode == 0 ? $imgWidth : $newWidth), ($mode == 0 ? $imgHeight : $newHeight)); // Insere l'image de base redimensionnee
|
||||
|
||||
// Check if permission are ok
|
||||
//$fp = fopen($imgTargetName, "w");
|
||||
@ -311,19 +307,24 @@ function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0,
|
||||
// Create image on disk (overwrite file if exists)
|
||||
switch ($newExt) {
|
||||
case 'gif': // Gif
|
||||
imagegif($imgThumb, $imgTargetName);
|
||||
$newquality = 'NU'; // Quality is not used for this format
|
||||
imagegif($imgTarget, $imgTargetName);
|
||||
break;
|
||||
case 'jpg': // Jpg
|
||||
imagejpeg($imgThumb, $imgTargetName, $newquality);
|
||||
$newquality = ($newquality ? $newquality : '100'); // % quality maximum
|
||||
imagejpeg($imgTarget, $imgTargetName, $newquality);
|
||||
break;
|
||||
case 'png': // Png
|
||||
imagepng($imgThumb, $imgTargetName, $newquality);
|
||||
$newquality = 0; // No compression (0-9)
|
||||
imagepng($imgTarget, $imgTargetName, $newquality);
|
||||
break;
|
||||
case 'bmp': // Bmp
|
||||
imagewbmp($imgThumb, $imgTargetName);
|
||||
$newquality = 'NU'; // Quality is not used for this format
|
||||
imagewbmp($imgTarget, $imgTargetName);
|
||||
break;
|
||||
case 'webp': // Webp
|
||||
imagewebp($imgThumb, $imgTargetName, $newquality);
|
||||
$newquality = ($newquality ? $newquality : '100'); // % quality maximum
|
||||
imagewebp($imgTarget, $imgTargetName, $newquality);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -334,7 +335,7 @@ function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0,
|
||||
|
||||
// Free memory. This does not delete image.
|
||||
imagedestroy($img);
|
||||
imagedestroy($imgThumb);
|
||||
imagedestroy($imgTarget);
|
||||
|
||||
clearstatcache(); // File was replaced by a modified one, so we clear file caches.
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user