2013-03-08 90 views
2

我試圖創建使用PHP的GD庫的照片的縮略圖。PHP GD庫調整照片

這裏是我採取的步驟。

  1. 創建GD圖像​​資源。
  2. 獲取高度和圖像
  3. 的寬度爲100像素,通過適當的寬高創建一個空白GD圖像資源
  4. 複製資源的圖像空白GD圖像資源,節省圖像

這裏是我的代碼:

private function getExtension($filename) { 
    $position=strrpos($filename, '.'); 
    $extension = strtolower(substr($filename, $position+1)); 
    if ($extension == "jpg") { 
     $extension = "jpeg"; 
    } 

    return $extension; 
} 

public function saveImage($parameters) { 
    $extension=$this->getExtension($parameters['filename']); 
    $createImageFunc="imagecreatefrom".$extension; 
    $imgResource=$createImageFunc(SITE_PATH."tmp/{$parameters['filename']}"); 
    $width=imagesx($imgResource); 
    $height=imagesy($imgResource); 
    $ratio=$height/$width; 
    $thumbnail=imagecreatetruecolor(100, 100*$ratio); 

    imagecopyresized($thumbnail, $imgResource, 0, 0, 0, 0, 100*$ratio, 100, $width, $height); 

    $imgResult=imagejpeg($imgResource, SITE_PATH."images/{$parameters['galleryName']}/{$parameters['filename']}"); 
    $thumbResult=imagejpeg($thumbnail, SITE_PATH."images/{$parameters['galleryName']}/thumbnails/{$parameters['filename']}"); 

} 

圖像正在保存,但副本不工作,縮略圖中有空的黑色空間。

這是原始圖像: enter image description here

這是GD再次保存圖像: enter image description here

這是縮略圖: enter image description here

我喜歡四檢查imagecopyresize和從我所瞭解的代碼中的所有值都應該是正確的。

這裏是php.net擁有的價值觀:

bool imagecopyresized (resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h) 

任何一個有什麼想法?

+0

檢查您的目的地的寬度複製 – Poonam 2013-03-08 07:54:04

回答

0

看看這個:PHP/GD Imagestyle
您可以輕鬆創建你想要

// create a thumbnail 
$thumb = imagestyle($image,'autosize:100 100'); 
// resize the image # resize:200 0; means width=200 height=auto 
$resized = imagestyle($image,'resize:200 0;'); 
// crop it # left=0, top=50, width=200, height=200 
$cropped = imagestyle($image,'crop:0 50 200 200;'); 
// and more 
0

與PHP/GD工作可能是乏味的縮略圖或一切,所以我寫了一個庫,使事情變得更加簡單:SimpleImage

隨着SimpleImage,您可以用兩種簡單的線條創建縮略圖:

// Load image from image.jpg 
$image = new \claviska\SimpleImage('image.jpg'); 

// Create a 100x100 thumbnail, convert to PNG, and save to thumb.png 
$image->thumbnail(100, 100)->toFile('thumb.png', 'image/png'); 

如果您仍然想要手動執行此操作,請檢查imagecopyresized參數。爲什麼寬度乘以$ratio