使用PHP上传、调整大小和裁剪图片中心。

4
我想创建一个非常基础的上传、调整大小和裁剪PHP脚本。这个脚本的功能将与Twitter用于上传头像图片的方法完全相同(至少在我上次检查时是这样的)。
我希望脚本能够接受任何尺寸的图像,将最短的一边调整为116像素,然后裁剪掉顶部和底部(或左侧和右侧,如果是横向的),以得到一个116像素乘以116像素的正方形。
我不想要一个臃肿的PHP脚本,也不需要客户端调整大小或其他什么东西,只需要一个简单的PHP调整大小和裁剪。这怎么做呢?

http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php - Frankie
1
你迄今为止做了什么?一些脚本吗? - ariefbayu
我还没有开始这个具体的项目,但是我曾经在一些过去的项目中尝试过,但是无法弄清楚。我希望有人能提供一些基本的代码来帮助我入门。 - Adam
4个回答

4

有一个简单易用的开源库叫做PHP Image Magician。它使用GD库,但将其使用简化为3行代码。

基本使用示例:

$magicianObj = new imageLib('racecar.jpg');
$magicianObj -> resizeImage(100, 200, 'crop');
$magicianObj -> saveImage('racecar_small.png');

迄今最好的。有很多非常易于使用的功能。谢谢!! - MazarD

4

2
如果你想要一个例子来参考,我的上传、调整大小和裁剪类可以做所有这些事情,还有其他一些很酷的功能 - 如果需要,你可以全部使用,或者只取出你喜欢的部分:

http://www.mjdigital.co.uk/blog/php-upload-and-resize-image-class/

我认为这并不太臃肿!- 你可以尝试这样做(未经测试):
如果已经上传了文件并且没有错误,那么执行以下操作:包含 'INCLUDE_CLASS_FILE_HERE.php' 文件;创建一个名为 $myImage 的新对象;将上传文件保存到指定的文件夹 uploads/ 中;返回一个包含图片详细信息的数组;调整图片大小到宽度为 116 像素,高度按比例缩放;获取新图片的宽度和高度;如果调整大小成功,则计算裁剪位置;裁剪图片到 116x116 像素,并输出结果。

谢谢 - 尽管我意识到在我的原始帖子中,我遗漏了crop方法的最后两个参数 - D'oh!我已经在上面修复了它,所以希望现在应该没问题了 - 以防万一,如果你需要调用crop方法,应该使用:$myImage->crop($cropToWidth,$cropToHeight,$cropFromX,$cropFromY); - mj7

0
我写了一个简单的函数,非常容易使用,它可以让您将图像调整大小、裁剪和居中到特定的宽度和高度,支持JPGs、PNGs和GIFs。随意将其复制并粘贴到您的代码中:
function resize_imagejpg($file, $w, $h, $finaldst) {

   list($width, $height) = getimagesize($file);
   $src = imagecreatefromjpeg($file);
   $ir = $width/$height;
   $fir = $w/$h;
   if($ir >= $fir){
       $newheight = $h; 
       $newwidth = $w * ($width / $height);
   }
   else {
       $newheight = $w / ($width/$height);
       $newwidth = $w;
   }   
   $xcor = 0 - ($newwidth - $w) / 2;
   $ycor = 0 - ($newheight - $h) / 2;


   $dst = imagecreatetruecolor($w, $h);
   imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, 
   $width, $height);
   imagejpeg($dst, $finaldst);
   imagedestroy($dst);
   return $file;


}






function resize_imagegif($file, $w, $h, $finaldst) {

   list($width, $height) = getimagesize($file);
   $src = imagecreatefromgif($file);
   $ir = $width/$height;
   $fir = $w/$h;
   if($ir >= $fir){
       $newheight = $h; 
       $newwidth = $w * ($width / $height);
   }
   else {
       $newheight = $w / ($width/$height);
       $newwidth = $w;
   }   
   $xcor = 0 - ($newwidth - $w) / 2;
   $ycor = 0 - ($newheight - $h) / 2;


   $dst = imagecreatetruecolor($w, $h);
   $background = imagecolorallocatealpha($dst, 0, 0, 0, 127);
   imagecolortransparent($dst, $background);
   imagealphablending($dst, false);
   imagesavealpha($dst, true);
   imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, $newheight, 
   $width, $height);
   imagegif($dst, $finaldst);
   imagedestroy($dst);
   return $file;


}



function resize_imagepng($file, $w, $h, $finaldst) {

   list($width, $height) = getimagesize($file);
   $src = imagecreatefrompng($file);
   $ir = $width/$height;
   $fir = $w/$h;
   if($ir >= $fir){
       $newheight = $h; 
       $newwidth = $w * ($width / $height);
   }
   else {
        $newheight = $w / ($width/$height);
   $newwidth = $w;
   }   
   $xcor = 0 - ($newwidth - $w) / 2;
   $ycor = 0 - ($newheight - $h) / 2;


   $dst = imagecreatetruecolor($w, $h);
   $background = imagecolorallocate($dst, 0, 0, 0);
   imagecolortransparent($dst, $background);
   imagealphablending($dst, false);
   imagesavealpha($dst, true);

   imagecopyresampled($dst, $src, $xcor, $ycor, 0, 0, $newwidth, 
   $newheight,$width, $height);

   imagepng($dst, $finaldst);
   imagedestroy($dst);
   return $file;


}








function ImageResize($file, $w, $h, $finaldst) {
      $getsize = getimagesize($file);
      $image_type = $getsize[2];

      if( $image_type == IMAGETYPE_JPEG) {

         resize_imagejpg($file, $w, $h, $finaldst);
      } elseif( $image_type == IMAGETYPE_GIF ) {

         resize_imagegif($file, $w, $h, $finaldst);
      } elseif( $image_type == IMAGETYPE_PNG ) {

         resize_imagepng($file, $w, $h, $finaldst);
      }





}

使用它的方法很简单,只需要像这样调用它:

ImageResize(image, width, height, destination);

例如

ImageResize("uploads/face.png", 100, 150, "images/user332profilepic.png");

这对我有用!我可以问一下,为什么那些resize函数都返回空吗? - Wilf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接