A chi interessa la funzione è questa:
Codice PHP:
define('THUMBNAIL_IMAGE_MAX_WIDTH', 150);
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150);
define('PC_IMAGE_MAX_WIDTH', 700);
define('PC_IMAGE_MAX_HEIGHT', 550);
define('UPLOADED_IMAGE_DESTINATION', './cache/img/');
define('THUMBNAIL_IMAGE_DESTINATION', './cache/img/');
function generateImage($source_image, $name_image) {
list($source_image_width, $source_image_height, $source_image_type) = getimagesizefromstring($source_image);
$source_gd_image = imagecreatefromstring($source_image);
if (!$source_gd_image) { return false; }
$source_aspect_ratio = $source_image_width / $source_image_height;
$pc_aspect_ratio = PC_IMAGE_MAX_WIDTH / PC_IMAGE_MAX_HEIGHT;
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
// PC
if ($source_image_width <= PC_IMAGE_MAX_WIDTH && $source_image_height <= PC_IMAGE_MAX_HEIGHT) {
$pc_image_width = $source_image_width;
$pc_image_height = $source_image_height;
} elseif ($pc_aspect_ratio > $source_aspect_ratio) {
$pc_image_width = (int) (PC_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
$pc_image_height = PC_IMAGE_MAX_HEIGHT;
} else {
$pc_image_width = PC_IMAGE_MAX_WIDTH;
$pc_image_height = (int) (PC_IMAGE_MAX_WIDTH / $source_aspect_ratio);
}
$pc_gd_image = imagecreatetruecolor($pc_image_width, $pc_image_height);
imagecopyresampled($pc_gd_image, $source_gd_image, 0, 0, 0, 0, $pc_image_width, pc_image_height, $source_image_width, $source_image_height);
$pc_image_path = UPLOADED_IMAGE_DESTINATION . 'pc_' . $name_image;
imagejpeg($pc_gd_image, $pc_image_path, 90);
// Thumbnail
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
$thumbnail_image_width = $source_image_width;
$thumbnail_image_height = $source_image_height;
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
$thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
$thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
} else {
$thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
$thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
}
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
$thumbnail_image_path = THUMBNAIL_IMAGE_DESTINATION . 'thumbs_' . $name_image;
imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
imagedestroy($source_gd_image);
imagedestroy($pc_gd_image);
imagedestroy($thumbnail_gd_image);
return true;
}
Sembra complessa ma non lo è, la funzione si trova su internet, io l'ho solo modificata in parte, cioè per essere usata con una stringa invece che con un file, e ne ho raddoppiate le funzionalità perché ora a partire da una stringa crea due file, uno chiamato pc_eccetera.jpg e uno thumbs_eccetera.jpg
La richiamate passando due parametri, uno è la stringa ottenuta dal database, l'altro il nome che volete assegnare all'immagine.
Bene no?
E invece no perché non funziona quella definita PC, cioè mi crea un'immagine nera mentre la thumbnails funziona perfettamente e mi ci sta scoppiando la testa.