Dans mes anciennes applications PHP j'ai utilisé pour exécuter une fonction comme celle ci-dessous pour créer des miniatures d'image jpeg.
function imageThumbanail() {
$image_src = imagecreatefromjpeg('http://examplesite.com/images/sample-image.jpg');
$thumbnail_width = 180; //Desirable thumbnail width size 180px
$image_width = imagesx($image_src); //Original image width size -> 1080px
$image_height = imagesy($image_src); //Original image height size -> 1080px
$thumbnail_height = floor( $image_height * ( $thumb_width / $image_width ) ); //Calculate the right thumbnail height depends on given thumbnail width
$virtual_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
imagecopyresampled($virtual_image, $image_src, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $image_width, $image_height);
header('Content-Type: image/jpeg');
imagejpeg($virtual_image, null, 100);
imagedestroy($virtual_image); //Free up memory
}
Le problème est que maintenant je voudrais exécuter une fonction similaire dans une application laravel 5.6, donc j'ai créé un contrôleur avec exactement la même fonction mais au lieu d'obtenir en sortie la miniature de l'image i obtenez des points d'interrogation et des icônes de diamant étranges, quelque chose comme la version codée de l'image jpeg de la bibliothèque php Gd.
J'ai essayé d'utiliser return response () -> file ($ pathToFile); comme laravel décrit mais je ne vais pas stocker dans un emplacement l'image miniature.
Des idées?
Merci d'avance!
Je vous recommande ce package est très simple à installer et à utiliser et très gentil avec la programmation. Son appelé Intervention
Paquet d'intervention pour gérer les images
Vous pouvez créer une vignette très simple comme suit:
$img = Image::make('public/foo.jpg')->resize(320, 240)->insert('public/watermark.png');
Redimensionner et recadrer l'image par centre
Pas besoin d'installer et d'inclure un package. Créez simplement une aide dans laravel/Lumen et mettez le code ci-dessous dans ce fichier d'assistance et utilisez-le où vous voulez:
function resize_crop_image($max_width, $max_height, $source_file, $dst_dir, $quality = 80){
$imgsize = getimagesize($source_file);
$width = $imgsize[0];
$height = $imgsize[1];
$mime = $imgsize['mime'];
switch($mime){
case 'image/gif':
$image_create = "imagecreatefromgif";
$image = "imagegif";
break;
case 'image/png':
$image_create = "imagecreatefrompng";
$image = "imagepng";
$quality = 7;
break;
case 'image/jpeg':
$image_create = "imagecreatefromjpeg";
$image = "imagejpeg";
$quality = 80;
break;
default:
return false;
break;
}
$dst_img = imagecreatetruecolor($max_width, $max_height);
$src_img = $image_create($source_file);
$width_new = $height * $max_width / $max_height;
$height_new = $width * $max_height / $max_width;
//if the new width is greater than the actual width of the image, then the height is too large and the rest cut off, or vice versa
if($width_new > $width){
//cut point by height
$h_point = (($height - $height_new) / 2);
//copy image
imagecopyresampled($dst_img, $src_img, 0, 0, 0, $h_point, $max_width, $max_height, $width, $height_new);
}else{
//cut point by width
$w_point = (($width - $width_new) / 2);
imagecopyresampled($dst_img, $src_img, 0, 0, $w_point, 0, $max_width, $max_height, $width_new, $height);
}
$image($dst_img, $dst_dir, $quality);
if($dst_img)imagedestroy($dst_img);
if($src_img)imagedestroy($src_img);
}
//usage example
resize_crop_image(100, 100, "test.jpg", "test.jpg");
Le code est déjà testé à plusieurs reprises et fonctionne bien. Tout le meilleur, économisez votre temps et profitez de votre vie:)