2011-07-01 120 views
1

因此,我一直在尝试从外部URL获取图像,裁剪并保存。我可以复制并保存好,但这是令我困扰的作物部分。我无法弄清楚如何从CURL中获取图像资源(我对curl不太了解,这是其他人的卷曲资料)。来自URL的图像然后剪裁

我虽然是这样的:

$img = imagecreatefromstring($image); 
$crop = imagecreatetruecolor(8,8); 
imagecopy ($crop, $img, 0, 0, 8, 8, 8, 8); 

但没有运气,节省了腐败PNG。下面是完整的代码:

  $link = "urlhere"; 
     $path = './mcimages/faces/'; 

      $curl_handle=curl_init(urldecode($link)); 
      curl_setopt($curl_handle, CURLOPT_NOBODY, true); 
      $result = curl_exec($curl_handle); 
      $retcode = false; 
      if($result !== false) 
      { 
       $status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE); 
       if($status == 200) 
        $retcode = true; 
      } 
      curl_close($curl_handle); 

      if($retcode) 
      { 
       $curl_handle=curl_init(); 
       curl_setopt($curl_handle,CURLOPT_URL,urldecode($link)); 
       curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); 
       curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); 
       $image = curl_exec($curl_handle); 
       curl_close($curl_handle); 

       if($image !== false) 
       { 
        $img = imagecreatefromstring($image); 
        $crop = imagecreatetruecolor(8,8); 

        imagecopy ($crop, $img, 0, 0, 8, 8, 8, 8); 

        if(strpos($link,"/") !== false) 

        { 
         $name = explode("/",$link); 
         $total = count($name); 
         $handle = fopen($path.$name[$total-1],"w") or die("Could not create : ".$path.rand()."_".$name[$total-1]); 
         if($handle !== false) 
         { 
          fwrite($handle,$crop); 
          fclose($handle); 
          echo 'The file has been successfully saved !'; 

         } 
        } 
       } 
      } else { 
       echo 'File not found !'; 
      } 

回答

1

AFAIK,这是错误的:

fwrite($handle,$crop); 

使用

imagejpeg($crop, 'output-file.jpg'); // or imagepng() 

你$作物是一种资源,而不是一个二进制字符串图像数据。

+0

这样做。尽管imagecopy似乎试图通过平滑颜色来“修复”图像,就好像它正在调整大小,但我会如何阻止这种情况?# – Crimsonfox

+0

嗯,必须从jpg-> PNG做一些事情。改变imagecreatetruecolor只是图像创建和保存为一个PNG,而现在它是完美的。负载的尺寸也较小。 =) – Crimsonfox