基于PHP服务端图片生成缩略图的方法详解

前端技术 2023/09/05 PHP
复制代码 代码如下:

<?php
//定义缩略图片尺寸
$picSize = array(
              \'100_100\'=> 1,
              \'200_100\'=> 1
           );
$imagePath = \"../image/\";
function parseUrl($url){
   preg_match(\"/(?P<name>[\\w\\d]+)_w(?P<width>\\d+)_h(?P<height>\\d+)\\.(?P<ext>\\w+)/\",$url,$match);
   return $match;
}
$urlArr = explode(\"/\",$_SERVER[\'REQUEST_URI\']);
$imgName = $urlArr[count($urlArr)-1];
$picInfo = parseUrl($imgName);
//错误尺寸
if(empty($picInfo[\'width\']) || empty($picInfo[\'height\']) ||
!array_key_exists($picInfo[\'width\'].\'_\'.$picInfo[\'height\'],$picSize)) die(\'不存在该尺寸图片\');
$originalPic = $imagePath.$picInfo[\'name\'].\'/\'.$picInfo[\'name\'].\'.\'.$picInfo[\'ext\'];
//原始图不存在
if(!file_exists($originalPic)) die(\"图片不存在!\");
/**
 *等比例压缩图片
 */
switch($picInfo[\'ext\']){
   case \'jpg\':
      $orgImg = ImageCreateFromJpeg($originalPic);
      break;
   default:
      break;
}
$owidth  =  ImageSX($orgImg); //原始尺寸
$oheight =  ImageSY($orgImg);
$tW = $picInfo[\'width\'];
$tH = $picInfo[\'height\'];
//获取缩略图尺寸
if($owidth/$oheight > $tW/$tH){
    $tH = intval($tW * $oheight/$owidth);
}else{
     $tW = intval($tH * $owidth/$oheight);
}
//生成背景图
$new_img = ImageCreateTrueColor($picInfo[\'width\'], $picInfo[\'height\']);
$bgColor = imagecolorallocate($new_img,255,255,255);
if (!@imagefilledrectangle($new_img, 0, 0, $picInfo[\'width\']-1, $picInfo[\'height\']-1, $bgColor)) {
    echo \"无法创建背景图\";  //@todo记录日志
    exit(0);
}
if (!@imagecopyresampled($new_img, $orgImg, ($picInfo[\'width\']-$tW)/2, ($picInfo[\'height\']-$tH)/2, 0, 0, $tW, $tH, $owidth, $oheight)) {
    echo \"生成图片失败\";
    exit(0);
}
//生成图片
ob_start();
imagejpeg($new_img);
$_newImg = ob_get_contents();
ob_end_clean();
file_put_contents($imagePath.$picInfo[\'name\'].\"/\".$imgName, $_newImg);
header(\"Content-type:image/jpeg; charset=utf-8\");
imagejpeg($new_img);
?>

使用时候绑定apache conf 的 documentError 404 的handler 为此文件。。

本文地址:https://www.stayed.cn/item/13675

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。