簡體   English   中英

在php中裁剪圖像的一部分並調整其大小

[英]Crop part of image in php and resize it

我有一個源圖像(可以是任何具有不同尺寸的圖像)。 我希望能夠告訴php圖片中的某個區域以裁剪並調整大小。 例如:

  • 源圖像為800x800像素。
  • PHP選擇圖像的50x50像素區域,選擇區域從源圖像的頂部邊緣開始80像素,從源圖像的左側邊緣開始100像素
  • 然后將所選區域調整為37x37像素。

我嘗試使用函數imagecopyresampled()和imagecopyresized()但它們都給了我一個奇怪的問題:imagecopyresampled()輸出選擇圖像但被一個等同於源圖像尺寸的黑色區域包圍。 imagecopyresized()也會選擇所選區域,但它只是覆蓋在源圖像上。 此處的最終目標是從源圖像制作縮略圖。

我已經使用的代碼示例是:

list($width_orig, $height_orig) = getimagesize($filename);
imagecopyresized($image_final, $image, 0, 0, 0, 0, 37, 37, $width_orig, $height_orig);

以上並不完全像任務描述的那樣,但它演示了我遇到的問題。

注意:

我知道對這個主題進行搜索可以得到很多結果,但是它們主要引用的庫和類比我實際需要的要多得多。 我寧願對解決方案有所了解,並實施一些更有效的方法。 因此,我不希望被指向完成上述任務和其他50項任務的詳盡腳本。 我寧願了解上述內容,以便創建最佳的自定義解決方案。

你的問題實際上是一個邏輯問題。 你能檢查一下被撕毀嗎? 如果它不適合作物長度的縮放比例。

    $w  = imagesx($img);
    $h  = imagesy($img);
    $newImage = imagecreatetruecolor($wNewOrj, $hNewOrj);
    if(($w/$h)<($wNewOrj/$hNewOrj)){
      $hNew = $h * $wNewOrj/$w;
      $wNew = $wNewOrj;
    }else{
      $hNew = $hNewOrj;
      $wNew = $w * $hNewOrj/$h;
    }
    $wDiff  = round(abs($wNewOrj-$wNew)/2);
    $hDiff  = round(abs($hNewOrj-$hNew)/2);
    imagecopyresampled($newImage, $img,
                       0,     0,     $wDiff,    $hDiff,
                       $wNew, $hNew, $w-$wDiff, $h-$hDiff);

    imagejpeg($newImage, $path, 85);

嘗試我的圖像操縱器類,它完全符合你的要求 - http://github.com/philBrown/Tolerable/blob/master/library/Tolerable/Image/Manipulator.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM