The images are too large and have inconsistent specifications. The display control needs to be completed by JavaScript. When used on mobile devices, the display effect is not good and the traffic is huge. The images in the existing image library need to be processed once to generate In line with the thumbnails for mobile devices, the work originally done by JS on the client side is transferred to the server side using PHP's GD library for centralized processing.
Image source and required size:
$src_img = "wallpaper.jpg"; $dst_w = 300; $dst_h = 200;
Crop the image to maximize the image area and scale it to the specified size.
I initially used the imagecopyresized method to reduce the image proportionally. After actual operation, I found that the image was very dry after being reduced. Then switch to the imagecopysampled method, which will resample the image and smooth the reduced image, greatly improving the clarity.
<?php list($src_w,$src_h)=getimagesize($src_img); // 获取原图尺寸 $dst_scale = $dst_h/$dst_w; //目标图像长宽比 $src_scale = $src_h/$src_w; // 原图长宽比 if($src_scale>=$dst_scale) { // 过高 $w = intval($src_w); $h = intval($dst_scale*$w); $x = 0; $y = ($src_h - $h)/3; } else { // 过宽 $h = intval($src_h); $w = intval($h/$dst_scale); $x = ($src_w - $w)/2; $y = 0; } // 剪裁 $source=imagecreatefromjpeg($src_img); $croped=imagecreatetruecolor($w, $h); imagecopy($croped,$source,0,0,$x,$y,$src_w,$src_h); // 缩放 $scale = $dst_w/$w; $target = imagecreatetruecolor($dst_w, $dst_h); $final_w = intval($w*$scale); $final_h = intval($h*$scale); imagecopysampled($target,$croped,0,0,0,0,$final_w,$final_h,$w,$h); // 保存 $timestamp = time(); imagejpeg($target, "$timestamp.jpg"); imagedestroy($target); ?>