2014-11-23 64 views
0

如何設置此代碼以1:1(方形)返回圖像?在PHP中創建正方形1:1縮略圖

目的是創建一個方形(非拉伸)的縮略圖。

我試過在'if部分'中進行更改。我得到一個方形圖像,但伸展。我希望它被裁剪。

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150); 
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150); 

$source_image_path = {here the source filename}; 
$thumbnail_image_path = {here de thumb filename}; 

list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); 
switch ($source_image_type) { 
    case IMAGETYPE_GIF: 
    $source_gd_image = imagecreatefromgif($source_image_path); 
    break; 
    case IMAGETYPE_JPEG: 
    $source_gd_image = imagecreatefromjpeg($source_image_path); 
    break; 
    case IMAGETYPE_PNG: 
    $source_gd_image = imagecreatefrompng($source_image_path); 
    break; 
} 
$source_aspect_ratio = $source_image_width/$source_image_height; 
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH/THUMBNAIL_IMAGE_MAX_HEIGHT; 
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) { 
    $thumbnail_image_width = $source_image_width; 
    $thumbnail_image_height = $source_image_height; 
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) { 
    $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio); 
    $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT; 
} else { 
    $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH; 
    $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH/$source_aspect_ratio); 
} 
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height); 
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height); 
imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90); 

PS。這不是重複的,我已經閱讀了這個主題的幾個問題,但是我無法將它與我的代碼集成。

+0

可能重複http://stackoverflow.com/questions/ 10107306/php-image-cropping-to-square) – 2014-11-23 22:04:25

+0

你想將圖片縮放並居中放到一個正方形中嗎?還是要將一個正方形從照片中間裁剪出來? – bumperbox 2014-11-23 22:04:41

+0

我希望它是正確的pped。 (這不是重複的,我已經閱讀了這個主題的幾個問題,但是我無法將它整合到我的代碼中)。 – matiq 2014-11-24 12:49:22

回答

0

This function確實起作用

function crop_img($imgSrc){ 
    //getting the image dimensions 
    list($width, $height) = getimagesize($imgSrc); 

    //saving the image into memory (for manipulation with GD Library) 
    $myImage = imagecreatefromjpeg($imgSrc); 

    // calculating the part of the image to use for thumbnail 
    if ($width > $height) { 
     $y = 0; 
     $x = ($width - $height)/2; 
     $smallestSide = $height; 
    } else { 
     $x = 0; 
     $y = ($height - $width)/2; 
     $smallestSide = $width; 
    } 

    // copying the part into thumbnail 
    $thumbSize = min($width,$height); 
    $thumb = imagecreatetruecolor($thumbSize, $thumbSize); 
    imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide); 

    unlink($imgSrc); 
    imagejpeg($thumb,$imgSrc); 
    @imagedestroy($myImage); 
    @imagedestroy($thumb); 
} 

發現:PHP crop image to fix width and height without losing dimension ratio

[PHP圖像裁剪到方(的
0

使用此代碼的代碼上傳圖片文件夾,重命名文件和拇指將與同名

HTML

<INPUT NAME="userfile[]" TYPE="file">

圖像目錄"upimg/"
拇指目錄thimg創建

PHP處理

$rename = md5(rand() * time()); 
     $add = "upimg/" . $rename . $_FILES['userfile']['name']; 
     if (move_uploaded_file($_FILES['userfile']['tmp_name'], $add)) { 
      echo "Successfully uploaded the image"; 
      chmod("$add", 0777); 
     } else { 
      exit; 
     } 
     $n_width = 200; 
     $n_height = 200; 
     $tsrc = "thimg/" . $rename . $_FILES['userfile']['name']; 
     if (!($_FILES['userfile']['type'] == "image/jpeg" OR $_FILES['userfile']['type'] == "image/gif")) { 
      exit; 
     } 
     if ($_FILES['userfile']['type'] == "image/gif") { 
      $im = ImageCreateFromGIF($add); 
      $width = ImageSx($im); 
      $height = ImageSy($im); 
      $newimage = imagecreatetruecolor($n_width, $n_height); 
      imageCopyResized($newimage, $im, 0, 0, 0, 0, $n_width, $n_height, $width, $height); 
      if (function_exists("imagegif")) { 
       Header("Content-type: image/gif"); 
       ImageGIF($newimage, $tsrc); 
      } elseif (function_exists("imagejpeg")) { 
       Header("Content-type: image/jpeg"); 
       ImageJPEG($newimage, $tsrc); 
      } 
      chmod("$tsrc", 0777); 
     } 
     if ($_FILES['userfile']['type'] == "image/jpeg") { 
      $im = ImageCreateFromJPEG($add); 
      $width = ImageSx($im); 
      $height = ImageSy($im); 
      $newimage = imagecreatetruecolor($n_width, $n_height); 
      imageCopyResized($newimage, $im, 0, 0, 0, 0, $n_width, $n_height, $width, $height); 
      ImageJpeg($newimage, $tsrc); 
      chmod("$tsrc", 0777); 
     } 
+0

從閱讀代碼我猜這將返回一個200x200px的縮略圖與原始圖像調整大小和居中在中間(黑色背景)。我需要的是原始圖像裁剪和縮放到一個正方形。 – matiq 2014-11-24 13:23:44