创建缩略图,固定大小 - PHP

Posted

技术标签:

【中文标题】创建缩略图,固定大小 - PHP【英文标题】:Create thumbnails, fixed sizes - PHP 【发布时间】:2014-05-17 01:51:08 【问题描述】:

我想从图像创建缩略图,但尺寸固定 - 310 像素宽,217 像素高。 我的代码: list($width, $height) = getimagesize($filename); $width = 310; $height = 217; $new_width = 310; $new_height = 217; $image_p = imagecreatetruecolor($new_width, $new_height); $image = imagecreatefromjpeg($filename); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);......

我怎样才能做到这一点?公式是什么?

【问题讨论】:

Trying to generate proportionally cropped thumbnails at a fixed width/height with php GD的可能重复 这对我有用:salman-w.blogspot.com/2009/04/… 【参考方案1】:
function resizeImage($url, $width, $height, $url_out, $keep_ratio = false)
  if($height <= 0 && $width <= 0)
    return false;
  else

copy($url, $url_out);
$info = getimagesize($url);
$image = '';
$final_width = 0;
$final_height = 0;
list($width_old, $height_old) = $info;
if($keep_ratio)
  if($width == 0)
    $factor = $height/$height_old;
  elseif($height == 0)
    $factor = $width/$width_old;
  else
    $factor = min($width / $width_old, $height / $height_old);
  $final_width = round( $width_old * $factor );
  $final_height = round( $height_old * $factor );

else
  $final_width = ($width <= 0) ? $width_old : $width;
  $final_height = ($height <= 0) ? $height_old : $height;

switch($info[2])
  case IMAGETYPE_GIF:
    $image = imagecreatefromgif($url_out);
    break;
  case IMAGETYPE_JPEG:
    $image = imagecreatefromjpeg($url_out);
    break;
  case IMAGETYPE_PNG:
    $image = imagecreatefrompng($url_out);
    break;
  default:
    return false;

$image_resized = imagecreatetruecolor($final_width, $final_height);
if($info[2] == IMAGETYPE_GIF || $info[2] == IMAGETYPE_PNG)
  $transparency = imagecolortransparent($image);
  if($transparency >= 0)
    $transparent_color = imagecolorsforindex($image, $trnprt_indx);
    $transparency = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
    imagefill($image_resized, 0, 0, $transparency);
    imagecolortransparent($image_resized, $transparency);
  
  elseif($info[2] == IMAGETYPE_PNG)
    imagealphablending($image_resized, false);
    $color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
    imagefill($image_resized, 0, 0, $color);
    imagesavealpha($image_resized, true);
  

imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
switch($info[2])
  case IMAGETYPE_GIF:
    imagegif($image_resized, $url_out);
    break;
  case IMAGETYPE_JPEG:
    imagejpeg($image_resized, $url_out);
    break;
  case IMAGETYPE_PNG:
    imagepng($image_resized, $url_out);
    break;
  default:
    return false;

imagedestroy($image_resized);
return true;
  

//只需调用该函数,并更改图像名称

$url="desert09.jpg";
resizeImage($url, 310, 217,"output.jpg", $keep_ratio = false);

【讨论】:

【参考方案2】:

我有这段代码(我不记得我从哪里得到的)并且我已经对其进行了一些编辑。我希望它可以帮助你,这会创建一个固定的正方形大小的拇指:

/** Create a square cropped thumb **/
function createSquareCroppedThumb($path , $thumbPath, $thumbSize = 100 )
        global $max_width, $max_height;

    /* Set Filenames */
    $srcFile    = $path;
    $thumbFile  = $thumbPath;

    /* Determine the File Type */
    $type = pathinfo($path, PATHINFO_EXTENSION);
    /* Create the Source Image */
    switch( $type )
        case 'jpg' : case 'jpeg' :
          $src = imagecreatefromjpeg( $srcFile ); break;
        case 'png' :
          $src = imagecreatefrompng( $srcFile ); break;
        case 'gif' :
          $src = imagecreatefromgif( $srcFile ); break;
    
    /* Determine the Image Dimensions */
    $oldW = imagesx( $src );
    $oldH = imagesy( $src );

    $minValue = $oldH > $oldW ? $oldW : $oldH;  

    /* Create the New Image */
    $new = imagecreatetruecolor( $thumbSize , $thumbSize );

    /* Transcribe the Source Image into the New (Square) Image */
    imagecopyresampled($new , $src , 0 , 0 , ($oldW / 2) - ($minValue /2) , ($oldH / 2) - ($minValue /2) , $thumbSize , $thumbSize , $minValue , $minValue );
    switch( $type )
        case 'jpg' : case 'jpeg' :
          $src = imagejpeg( $new , $thumbFile ); break;
        case 'png' :
          $src = imagepng( $new , $thumbFile ); break;
        case 'gif' :
          $src = imagegif( $new , $thumbFile ); break;
    

  imagedestroy( $new );

【讨论】:

这适用于 310x310,但如何使其适用于 310x217?

以上是关于创建缩略图,固定大小 - PHP的主要内容,如果未能解决你的问题,请参考以下文章

PHP缩略图组件的使用?

php 添加新的缩略图大小

php 自定义缩略图大小

使用 PHP 获取 PDF 文件的高度和宽度

php 在单个产品页面更改图库缩略图大小

带有白色背景且未集中的 PHP 缩略图