Raga ho un problema con un mio script per redimensionere le immagini: gif, jpg, png.
Funziona tutto bene, l'unico problema è che se l'immagine è "molto" grande (a livello di pixel) non me la redimensiona...sapete come mai?
Tutto funziona bene, non so esattamente fino a che risoluzione ma se provo con un'immagine 3264x2448 non va più niente. La stessa immagine a 1024x768 viene caricata.
Lo script è questo:
Codice PHP:
function resize_image($image_type = "", $image_file = "", $dest_file = "", $new_width = 96) {
if (( !$image_file != "" ) && ( !$image_type != "" )) {
return 0;
}
if ( !file_exists($image_file) ) {
return 0;
}
switch (trim($image_type)) {
case "image/gif":
$im = @imagecreatefromgif($image_file);
break;
case "image/jpeg":
case "image/pjpeg":
$im = @imagecreatefromjpeg($image_file);
break;
case "image/png":
case "image/x-png":
$im = @imagecreatefrompng($image_file);
break;
default:
$im = false;
break;
}
if ( !$im ) {
return 0;
}
// Leggo le dimensioni originali dell'immagine
$width = imagesx($im);
$height = imagesy($im);
// Imposto le nuove dimensioni dell'immagine
$new_width = ($new_width > 0) ? $new_width : $width;
$new_height = ($new_width > 0) ? ($new_width * $height) / $width : $height;
// Ridimensiono l'immagine
$im_resized = imagecreatetruecolor($new_width, $new_height);
// Conservo la trasparenza dell'immagine
if( $image_type == "image/gif" || $image_type == "image/png" ) {
$colorcount = imagecolorstotal($im);
if ( $colorcount == 0 ) $colorcount = 256;
imagetruecolortopalette($im_resized, true, $colorcount);
imagepalettecopy($im_resized, $im);
$transparentcolor = imagecolortransparent($im);
imagefill($im_resized, 0, 0, $transparentcolor);
imagecolortransparent($im_resized, $transparentcolor);
}
imagecopyresampled($im_resized, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Scrivo l'immagine sul disco
if ( $dest_file == '' ) {
$dest_file = $image_file;
}
switch ($image_type) {
case "image/gif":
imagegif($im_resized, $dest_file);
break;
case "image/jpeg":
case "image/pjpeg":
imagejpeg($im_resized, $dest_file, 100);
break;
case "image/png":
case "image/x-png":
imagepng($im_resized, $dest_file, 1);
break;
}
return 1;
}
consigli?