2012-01-25 51 views
0

我想调整图像大小,使调整大小始终填充所需的区域。我希望脚本获取任意大小的图像,将最短边调整为90px,然后裁剪顶部和底部(如果是横向,则左右两侧)以获得90px 90px的正方形图像调整大小和作物

+2

你能告诉你试过了吗? –

+1

我使用Codeigniter Image_lib来调整大小 –

+0

什么都不起作用? –

回答

2

此代码执行此操作与GD功能。

源图像可以是JPEG,PNG,GIF或BMP格式。如果你事先知道格式,你可以摆脱switch语句。结果保存为JPEG。

    $srcPath = "your source image path goes here"; 
        $dstPath = "your destination image path goes here"; 
        $size = "90x90"; 

        list($w, $h, $type) = getimagesize($srcPath); 

        switch ($type) { 
          case IMAGETYPE_JPEG: 
            $src = imagecreatefromjpeg($srcPath); 
            break; 
          case IMAGETYPE_PNG: 
            $src = imagecreatefrompng($srcPath); 
            break; 
          case IMAGETYPE_GIF: 
            $src = imagecreatefromgif($srcPath); 
            break; 
          case IMAGETYPE_BMP: 
            $src = imagecreatefrombmp($srcPath); 
            break; 
        } 

        list($dst_w, $dst_h) = explode('x', $size); 
        $dst = imagecreatetruecolor($dst_w, $dst_h); 

        $dst_x = $dst_y = 0; 
        $src_x = $src_y = 0; 

        if ($dst_w/$dst_h < $w/$h) { 
          $src_w = $h*($dst_w/$dst_h); 
          $src_h = $h; 
          $src_x = ($w-$src_w)/2; 
          $src_y = 0; 
        } else { 
          $src_w = $w; 
          $src_h = $w*($dst_h/$dst_w); 
          $src_x = 0; 
          $src_y = ($h-$src_h)/2; 
        } 

        imagecopyresampled($dst, $src, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); 

        imagejpeg($dst, $dstPath); 
        imagedestroy($src); 
        imagedestroy($dst); 
+0

这是创造一个黑色的图像90 * 90 –

+0

对不起,这是我的错,它像一个魅力工作。 –

+0

尽管这是完全有效的,但使用CodeIgniter进行此操作的效率相当低,CodeIgniter拥有自己的用于此任务的库。 –