123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716 |
- <?php
- /* Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net>
- * Copyright (C) 2005-2007 Regis Houssin <regis.houssin@inodbox.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- * or see https://www.gnu.org/
- */
- /**
- * \file htdocs/core/lib/images.lib.php
- * \brief Set of function for manipulating images
- */
- // Define size of logo small and mini
- $maxwidthsmall = 350; $maxheightsmall = 200; // Near 16/9eme
- $maxwidthmini = 128; $maxheightmini = 72; // 16/9eme
- $quality = 80;
- /**
- * Return if a filename is file name of a supported image format
- *
- * @param string $file Filename
- * @param int $acceptsvg 0=Default (depends on setup), 1=Always accept SVG as image files
- * @return int -1=Not image filename, 0=Image filename but format not supported for conversion by PHP, 1=Image filename with format supported by this PHP
- */
- function image_format_supported($file, $acceptsvg = 0)
- {
- global $conf;
- $regeximgext = '\.gif|\.jpg|\.jpeg|\.png|\.bmp|\.webp|\.xpm|\.xbm'; // See also into product.class.php
- if ($acceptsvg || ! empty($conf->global->MAIN_ALLOW_SVG_FILES_AS_IMAGES)) {
- $regeximgext .= '|\.svg'; // Not allowed by default. SVG can contains javascript
- }
- // Case filename is not a format image
- $reg = array();
- if (!preg_match('/('.$regeximgext.')$/i', $file, $reg)) return -1;
- // Case filename is a format image but not supported by this PHP
- $imgfonction = '';
- if (strtolower($reg[1]) == '.gif') $imgfonction = 'imagecreatefromgif';
- if (strtolower($reg[1]) == '.jpg') $imgfonction = 'imagecreatefromjpeg';
- if (strtolower($reg[1]) == '.jpeg') $imgfonction = 'imagecreatefromjpeg';
- if (strtolower($reg[1]) == '.png') $imgfonction = 'imagecreatefrompng';
- if (strtolower($reg[1]) == '.bmp') $imgfonction = 'imagecreatefromwbmp';
- if (strtolower($reg[1]) == '.webp') $imgfonction = 'imagecreatefromwebp';
- if (strtolower($reg[1]) == '.xpm') $imgfonction = 'imagecreatefromxpm';
- if (strtolower($reg[1]) == '.xbm') $imgfonction = 'imagecreatefromxbm';
- if (strtolower($reg[1]) == '.svg') $imgfonction = 'imagecreatefromsvg'; // Never available
- if ($imgfonction)
- {
- if (!function_exists($imgfonction))
- {
- // Fonctions of conversion not available in this PHP
- return 0;
- }
- // Filename is a format image and supported for conversion by this PHP
- return 1;
- }
- return 0;
- }
- /**
- * Return size of image file on disk (Supported extensions are gif, jpg, png and bmp)
- *
- * @param string $file Full path name of file
- * @param bool $url Image with url (true or false)
- * @return array array('width'=>width, 'height'=>height)
- */
- function dol_getImageSize($file, $url = false)
- {
- $ret = array();
- if (image_format_supported($file) < 0) return $ret;
- $filetoread = $file;
- if (!$url)
- {
- $filetoread = realpath(dol_osencode($file)); // Chemin canonique absolu de l'image
- }
- if ($filetoread)
- {
- $infoImg = getimagesize($filetoread); // Recuperation des infos de l'image
- $ret['width'] = $infoImg[0]; // Largeur de l'image
- $ret['height'] = $infoImg[1]; // Hauteur de l'image
- }
- return $ret;
- }
- /**
- * Resize or crop an image file (Supported extensions are gif, jpg, png and bmp)
- *
- * @param string $file Path of file to resize/crop
- * @param int $mode 0=Resize, 1=Crop
- * @param int $newWidth Largeur maximum que dois faire l'image destination (0=keep ratio)
- * @param int $newHeight Hauteur maximum que dois faire l'image destination (0=keep ratio)
- * @param int $src_x Position of croping image in source image (not use if mode=0)
- * @param int $src_y Position of croping image in source image (not use if mode=0)
- * @return string File name if OK, error message if KO
- */
- function dol_imageResizeOrCrop($file, $mode, $newWidth, $newHeight, $src_x = 0, $src_y = 0)
- {
- require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
- global $conf, $langs;
- dol_syslog("dol_imageResizeOrCrop file=".$file." mode=".$mode." newWidth=".$newWidth." newHeight=".$newHeight." src_x=".$src_x." src_y=".$src_y);
- // Clean parameters
- $file = trim($file);
- // Check parameters
- if (!$file)
- {
- // Si le fichier n'a pas ete indique
- return 'Bad parameter file';
- } elseif (!file_exists($file))
- {
- // Si le fichier passe en parametre n'existe pas
- return $langs->trans("ErrorFileNotFound", $file);
- } elseif (image_format_supported($file) < 0)
- {
- return 'This filename '.$file.' does not seem to be an image filename.';
- } elseif (!is_numeric($newWidth) && !is_numeric($newHeight))
- {
- return 'Wrong value for parameter newWidth or newHeight';
- } elseif ($mode == 0 && $newWidth <= 0 && $newHeight <= 0)
- {
- return 'At least newHeight or newWidth must be defined for resizing';
- } elseif ($mode == 1 && ($newWidth <= 0 || $newHeight <= 0))
- {
- return 'Both newHeight or newWidth must be defined for croping';
- }
- $filetoread = realpath(dol_osencode($file)); // Chemin canonique absolu de l'image
- $infoImg = getimagesize($filetoread); // Recuperation des infos de l'image
- $imgWidth = $infoImg[0]; // Largeur de l'image
- $imgHeight = $infoImg[1]; // Hauteur de l'image
- if ($mode == 0) // If resize, we check parameters
- {
- if ($newWidth <= 0)
- {
- $newWidth = intval(($newHeight / $imgHeight) * $imgWidth); // Keep ratio
- }
- if ($newHeight <= 0)
- {
- $newHeight = intval(($newWidth / $imgWidth) * $imgHeight); // Keep ratio
- }
- }
- $imgfonction = '';
- switch ($infoImg[2])
- {
- case 1: // IMG_GIF
- $imgfonction = 'imagecreatefromgif';
- break;
- case 2: // IMG_JPG
- $imgfonction = 'imagecreatefromjpeg';
- break;
- case 3: // IMG_PNG
- $imgfonction = 'imagecreatefrompng';
- break;
- case 4: // IMG_WBMP
- $imgfonction = 'imagecreatefromwbmp';
- break;
- 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;
- }
- }
- // Initialisation des variables selon l'extension de l'image
- 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 = 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 = '100'; // % quality maximum
- break;
- }
- // Create empty image
- if ($infoImg[2] == 1)
- {
- // Compatibilite image GIF
- $imgThumb = imagecreate($newWidth, $newHeight);
- } else {
- $imgThumb = imagecreatetruecolor($newWidth, $newHeight);
- }
- // Activate antialiasing for better quality
- if (function_exists('imageantialias'))
- {
- imageantialias($imgThumb, true);
- }
- // This is to keep transparent alpha channel if exists (PHP >= 4.2)
- if (function_exists('imagesavealpha'))
- {
- imagesavealpha($imgThumb, 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);
- break;
- case 2: // Jpg
- $trans_colour = imagecolorallocatealpha($imgThumb, 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
- break;
- case 4: // Bmp
- $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0);
- break;
- case 18: // Webp
- $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 127);
- break;
- }
- if (function_exists("imagefill")) imagefill($imgThumb, 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
- $imgThumbName = $file;
- // Check if permission are ok
- //$fp = fopen($imgThumbName, "w");
- //fclose($fp);
- // Create image on disk
- switch ($infoImg[2])
- {
- case 1: // Gif
- imagegif($imgThumb, $imgThumbName);
- break;
- case 2: // Jpg
- imagejpeg($imgThumb, $imgThumbName, $newquality);
- break;
- case 3: // Png
- imagepng($imgThumb, $imgThumbName, $newquality);
- break;
- case 4: // Bmp
- imagewbmp($imgThumb, $imgThumbName);
- break;
- case 18: // Webp
- imagewebp($imgThumb, $imgThumbName, $newquality);
- break;
- }
- // Set permissions on file
- if (!empty($conf->global->MAIN_UMASK)) @chmod($imgThumbName, octdec($conf->global->MAIN_UMASK));
- // Free memory. This does not delete image.
- imagedestroy($img);
- imagedestroy($imgThumb);
- clearstatcache(); // File was replaced by a modified one, so we clear file caches.
- return $imgThumbName;
- }
- /**
- * dolRotateImage if image is a jpg file.
- * Currently use an autodetection to know if we can rotate.
- * TODO Introduce a new parameter to force rotate.
- *
- * @param string $file_path Full path to image to rotate
- * @return boolean Success or not
- */
- function dolRotateImage($file_path)
- {
- return correctExifImageOrientation($file_path, $file_path);
- }
- /**
- * Add exif orientation correction for image
- *
- * @param string $fileSource Full path to source image to rotate
- * @param string $fileDest string : Full path to image to rotate | false return gd img | null the raw image stream will be outputted directly
- * @param int $quality output image quality
- * @return bool : true on success or false on failure or gd img if $fileDest is false.
- */
- function correctExifImageOrientation($fileSource, $fileDest, $quality = 95)
- {
- if (function_exists('exif_read_data')) {
- $exif = @exif_read_data($fileSource);
- if ($exif && isset($exif['Orientation'])) {
- $infoImg = getimagesize($fileSource); // Get image infos
- $orientation = $exif['Orientation'];
- if ($orientation != 1) {
- $img = imagecreatefromjpeg($fileSource);
- $deg = 0;
- switch ($orientation) {
- case 3:
- $deg = 180;
- break;
- case 6:
- $deg = 270;
- break;
- case 8:
- $deg = 90;
- break;
- }
- if ($deg) {
- if ($infoImg[2] === 'IMAGETYPE_PNG') // In fact there is no exif on PNG but just in case
- {
- imagealphablending($img, false);
- imagesavealpha($img, true);
- $img = imagerotate($img, $deg, imageColorAllocateAlpha($img, 0, 0, 0, 127));
- imagealphablending($img, false);
- imagesavealpha($img, true);
- } else {
- $img = imagerotate($img, $deg, 0);
- }
- }
- // then rewrite the rotated image back to the disk as $fileDest
- if ($fileDest === false) {
- return $img;
- } else {
- // In fact there exif is only for JPG but just in case
- // Create image on disk
- $image = false;
- switch ($infoImg[2])
- {
- case IMAGETYPE_GIF: // 1
- $image = imagegif($img, $fileDest);
- break;
- case IMAGETYPE_JPEG: // 2
- $image = imagejpeg($img, $fileDest, $quality);
- break;
- case IMAGETYPE_PNG: // 3
- $image = imagepng($img, $fileDest, $quality);
- break;
- case IMAGETYPE_BMP: // 6
- // Not supported by PHP GD
- break;
- case IMAGETYPE_WBMP: // 15
- $image = imagewbmp($img, $fileDest);
- break;
- }
- // Free up memory (imagedestroy does not delete files):
- @imagedestroy($img);
- return $image;
- }
- } // if there is some rotation necessary
- } // if have the exif orientation info
- } // if function exists
- return false;
- }
- /**
- * Create a thumbnail from an image file (Supported extensions are gif, jpg, png and bmp).
- * If file is myfile.jpg, new file may be myfile_small.jpg
- *
- * @param string $file Path of source file to resize
- * @param int $maxWidth Largeur maximum que dois faire la miniature (-1=unchanged, 160 by default)
- * @param int $maxHeight Hauteur maximum que dois faire l'image (-1=unchanged, 120 by default)
- * @param string $extName Extension to differenciate thumb file name ('_small', '_mini')
- * @param int $quality Quality of compression (0=worst, 100=best)
- * @param string $outdir Directory where to store thumb
- * @param int $targetformat New format of target (IMAGETYPE_GIF, IMAGETYPE_JPG, IMAGETYPE_PNG, IMAGETYPE_BMP, IMAGETYPE_WBMP ... or 0 to keep old format)
- * @return string Full path of thumb or '' if it fails or 'Error...' if it fails
- */
- function vignette($file, $maxWidth = 160, $maxHeight = 120, $extName = '_small', $quality = 50, $outdir = 'thumbs', $targetformat = 0)
- {
- require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
- global $conf, $langs;
- dol_syslog("vignette file=".$file." extName=".$extName." maxWidth=".$maxWidth." maxHeight=".$maxHeight." quality=".$quality." outdir=".$outdir." targetformat=".$targetformat);
- // Clean parameters
- $file = trim($file);
- // Check parameters
- if (!$file)
- {
- // Si le fichier n'a pas ete indique
- return 'ErrorBadParameters';
- } elseif (!file_exists($file))
- {
- // Si le fichier passe en parametre n'existe pas
- dol_syslog($langs->trans("ErrorFileNotFound", $file), LOG_ERR);
- return $langs->trans("ErrorFileNotFound", $file);
- } elseif (image_format_supported($file) < 0)
- {
- dol_syslog('This file '.$file.' does not seem to be an image format file name.', LOG_WARNING);
- return 'ErrorBadImageFormat';
- } elseif (!is_numeric($maxWidth) || empty($maxWidth) || $maxWidth < -1) {
- // Si la largeur max est incorrecte (n'est pas numerique, est vide, ou est inferieure a 0)
- dol_syslog('Wrong value for parameter maxWidth', LOG_ERR);
- return 'Error: Wrong value for parameter maxWidth';
- } elseif (!is_numeric($maxHeight) || empty($maxHeight) || $maxHeight < -1) {
- // Si la hauteur max est incorrecte (n'est pas numerique, est vide, ou est inferieure a 0)
- dol_syslog('Wrong value for parameter maxHeight', LOG_ERR);
- return 'Error: Wrong value for parameter maxHeight';
- }
- $filetoread = realpath(dol_osencode($file)); // Chemin canonique absolu de l'image
- $infoImg = getimagesize($filetoread); // Recuperation des infos de l'image
- $imgWidth = $infoImg[0]; // Largeur de l'image
- $imgHeight = $infoImg[1]; // Hauteur de l'image
- $ort = false;
- if (function_exists('exif_read_data')) {
- $exif = @exif_read_data($filetoread);
- if ($exif && !empty($exif['Orientation'])) {
- $ort = $exif['Orientation'];
- }
- }
- if ($maxWidth == -1) $maxWidth = $infoImg[0]; // If size is -1, we keep unchanged
- if ($maxHeight == -1) $maxHeight = $infoImg[1]; // If size is -1, we keep unchanged
- // Si l'image est plus petite que la largeur et la hauteur max, on ne cree pas de vignette
- if ($infoImg[0] < $maxWidth && $infoImg[1] < $maxHeight)
- {
- // On cree toujours les vignettes
- dol_syslog("File size is smaller than thumb size", LOG_DEBUG);
- //return 'Le fichier '.$file.' ne necessite pas de creation de vignette';
- }
- $imgfonction = '';
- switch ($infoImg[2])
- {
- case IMAGETYPE_GIF: // 1
- $imgfonction = 'imagecreatefromgif';
- break;
- case IMAGETYPE_JPEG: // 2
- $imgfonction = 'imagecreatefromjpeg';
- break;
- case IMAGETYPE_PNG: // 3
- $imgfonction = 'imagecreatefrompng';
- break;
- case IMAGETYPE_BMP: // 6
- // Not supported by PHP GD
- break;
- case IMAGETYPE_WBMP: // 15
- $imgfonction = 'imagecreatefromwbmp';
- break;
- }
- if ($imgfonction)
- {
- if (!function_exists($imgfonction))
- {
- // Fonctions de conversion non presente dans ce PHP
- return 'Error: Creation of thumbs not possible. This PHP does not support GD function '.$imgfonction;
- }
- }
- // On cree le repertoire contenant les vignettes
- $dirthumb = dirname($file).($outdir ? '/'.$outdir : ''); // Chemin du dossier contenant les vignettes
- dol_mkdir($dirthumb);
- // Initialisation des variables selon l'extension de l'image
- $img = null;
- switch ($infoImg[2])
- {
- case IMAGETYPE_GIF: // 1
- $img = imagecreatefromgif($filetoread);
- $extImg = '.gif'; // Extension de l'image
- break;
- case IMAGETYPE_JPEG: // 2
- $img = imagecreatefromjpeg($filetoread);
- $extImg = (preg_match('/\.jpeg$/', $file) ? '.jpeg' : '.jpg'); // Extension de l'image
- break;
- case IMAGETYPE_PNG: // 3
- $img = imagecreatefrompng($filetoread);
- $extImg = '.png';
- break;
- case IMAGETYPE_BMP: // 6
- // Not supported by PHP GD
- $extImg = '.bmp';
- break;
- case IMAGETYPE_WBMP: // 15
- $img = imagecreatefromwbmp($filetoread);
- $extImg = '.bmp';
- break;
- }
- if (!is_resource($img))
- {
- dol_syslog('Failed to detect type of image. We found infoImg[2]='.$infoImg[2], LOG_WARNING);
- return 0;
- }
- $exifAngle = false;
- if ($ort && !empty($conf->global->MAIN_USE_EXIF_ROTATION)) {
- switch ($ort)
- {
- case 3: // 180 rotate left
- $exifAngle = 180;
- break;
- case 6: // 90 rotate right
- $exifAngle = -90;
- // changing sizes
- $trueImgWidth = $infoImg[1];
- $trueImgHeight = $infoImg[0];
- break;
- case 8: // 90 rotate left
- $exifAngle = 90;
- // changing sizes
- $trueImgWidth = $infoImg[1]; // Largeur de l'image
- $trueImgHeight = $infoImg[0]; // Hauteur de l'image
- break;
- }
- }
- if ($exifAngle)
- {
- $rotated = false;
- if ($infoImg[2] === 'IMAGETYPE_PNG') // In fact there is no exif on PNG but just in case
- {
- imagealphablending($img, false);
- imagesavealpha($img, true);
- $rotated = imagerotate($img, $exifAngle, imageColorAllocateAlpha($img, 0, 0, 0, 127));
- imagealphablending($rotated, false);
- imagesavealpha($rotated, true);
- } else {
- $rotated = imagerotate($img, $exifAngle, 0);
- }
- // replace image with good orientation
- if (!empty($rotated)) {
- $img = $rotated;
- $imgWidth = $trueImgWidth;
- $imgHeight = $trueImgHeight;
- }
- }
- // Initialisation des dimensions de la vignette si elles sont superieures a l'original
- if ($maxWidth > $imgWidth) { $maxWidth = $imgWidth; }
- if ($maxHeight > $imgHeight) { $maxHeight = $imgHeight; }
- $whFact = $maxWidth / $maxHeight; // Facteur largeur/hauteur des dimensions max de la vignette
- $imgWhFact = $imgWidth / $imgHeight; // Facteur largeur/hauteur de l'original
- // Fixe les dimensions de la vignette
- if ($whFact < $imgWhFact)
- {
- // Si largeur determinante
- $thumbWidth = $maxWidth;
- $thumbHeight = $thumbWidth / $imgWhFact;
- } else {
- // Si hauteur determinante
- $thumbHeight = $maxHeight;
- $thumbWidth = $thumbHeight * $imgWhFact;
- }
- $thumbHeight = round($thumbHeight);
- $thumbWidth = round($thumbWidth);
- // Define target format
- if (empty($targetformat)) $targetformat = $infoImg[2];
- // Create empty image
- if ($targetformat == IMAGETYPE_GIF)
- {
- // Compatibilite image GIF
- $imgThumb = imagecreate($thumbWidth, $thumbHeight);
- } else {
- $imgThumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
- }
- // Activate antialiasing for better quality
- if (function_exists('imageantialias'))
- {
- imageantialias($imgThumb, true);
- }
- // This is to keep transparent alpha channel if exists (PHP >= 4.2)
- if (function_exists('imagesavealpha'))
- {
- imagesavealpha($imgThumb, true);
- }
- // Initialisation des variables selon l'extension de l'image
- // $targetformat is 0 by default, in such case, we keep original extension
- switch ($targetformat)
- {
- case IMAGETYPE_GIF: // 1
- $trans_colour = imagecolorallocate($imgThumb, 255, 255, 255); // On procede autrement pour le format GIF
- imagecolortransparent($imgThumb, $trans_colour);
- $extImgTarget = '.gif';
- $newquality = 'NU';
- break;
- case IMAGETYPE_JPEG: // 2
- $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0);
- $extImgTarget = (preg_match('/\.jpeg$/i', $file) ? '.jpeg' : '.jpg');
- $newquality = $quality;
- break;
- case IMAGETYPE_PNG: // 3
- imagealphablending($imgThumb, false); // Pour compatibilite sur certain systeme
- $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 127); // Keep transparent channel
- $extImgTarget = '.png';
- $newquality = $quality - 100;
- $newquality = round(abs($quality - 100) * 9 / 100);
- break;
- case IMAGETYPE_BMP: // 6
- // Not supported by PHP GD
- $extImgTarget = '.bmp';
- $newquality = 'NU';
- break;
- case IMAGETYPE_WBMP: // 15
- $trans_colour = imagecolorallocatealpha($imgThumb, 255, 255, 255, 0);
- $extImgTarget = '.bmp';
- $newquality = 'NU';
- break;
- }
- if (function_exists("imagefill")) imagefill($imgThumb, 0, 0, $trans_colour);
- dol_syslog("vignette: convert image from ($imgWidth x $imgHeight) to ($thumbWidth x $thumbHeight) 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, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight); // Insere l'image de base redimensionnee
- $fileName = preg_replace('/(\.gif|\.jpeg|\.jpg|\.png|\.bmp)$/i', '', $file); // On enleve extension quelquesoit la casse
- $fileName = basename($fileName);
- //$imgThumbName = $dirthumb.'/'.getImageFileNameForSize(basename($file), $extName, $extImgTarget); // Full path of thumb file
- $imgThumbName = getImageFileNameForSize($file, $extName, $extImgTarget); // Full path of thumb file
- // Check if permission are ok
- //$fp = fopen($imgThumbName, "w");
- //fclose($fp);
- // Create image on disk
- switch ($targetformat)
- {
- case IMAGETYPE_GIF: // 1
- imagegif($imgThumb, $imgThumbName);
- break;
- case IMAGETYPE_JPEG: // 2
- imagejpeg($imgThumb, $imgThumbName, $newquality);
- break;
- case IMAGETYPE_PNG: // 3
- imagepng($imgThumb, $imgThumbName, $newquality);
- break;
- case IMAGETYPE_BMP: // 6
- // Not supported by PHP GD
- break;
- case IMAGETYPE_WBMP: // 15
- imagewbmp($imgThumb, $imgThumbName);
- break;
- }
- // Set permissions on file
- if (!empty($conf->global->MAIN_UMASK)) @chmod($imgThumbName, octdec($conf->global->MAIN_UMASK));
- // Free memory. This does not delete image.
- imagedestroy($img);
- imagedestroy($imgThumb);
- return $imgThumbName;
- }
|