Resimden merkeze 200 * 130 ebadında bir görüntü kırpmak istiyorum kırpılacak resmin boyutu değişebilir, eğer resim küçülüyorsa kırpmazsınız bu bölüme nerede i yüksekliğini ve görüntünün kontrolünü yapabilir ancak resmin ortasından kırpılan şeylere çarpar. Merkezin ekin noktası olarak nasıl saklanacağını ve dışarıdan daha fazla kırpmasını sağlayamadımKırpma Resmi Merkezden PHP
cevap
GD, 4.3.6 sürümünden itibaren tüm PHP yüklemeleriyle birlikte gelir, böylece şansınız olur.
İşte
- GD
imagecreatefrom*()
işlevlerden birini kullanarak bir görüntü kaynağı oluşturun ... Eğer yapılması gereken adımlar var. Kullandığınız kimse kırpmaimagecopy()
mahsul koordinatlarını bulun kullanarak aşağıdaki algoritmayı ve kırpma kullanarak koordinatları belirlemek imagesx()
ve
imagesy()
kullanarak görüntü boyutlarını belirleyin sen$width = imagesx($img);
$height = imagesy($img);
$centreX = round($width/2);
$centreY = round($height/2);
$cropWidth = 200;
$cropHeight = 130;
$cropWidthHalf = round($cropWidth/2); // could hard-code this but I'm keeping it flexible
$cropHeightHalf = round($cropHeight/2);
$x1 = max(0, $centreX - $cropWidthHalf);
$y1 = max(0, $centreY - $cropHeightHalf);
$x2 = min($width, $centreX + $cropWidthHalf);
$y2 = min($height, $centreY + $cropHeightHalf);
benim resim işleme sınıfını kullanmak için çekinmeyin, çok daha kolay bazı yönlerini yapmalıdır
$im = new ImageManipulator('/path/to/image');
$centreX = round($im->getWidth()/2);
$centreY = round($im->getHeight()/2);
$x1 = $centreX - 100;
$y1 = $centreY - 65;
$x2 = $centreX + 100;
$y2 = $centreY + 65;
$im->crop($x1, $y1, $x2, $y2); // takes care of out of boundary conditions automatically
$im->save('/path/to/cropped/image');
Bu size yardımcı olabilir .
function cropCentered($img, $w, $h)
{
$cx = $img->getWidth()/2;
$cy = $img->getHeight()/2;
$x = $cx - $w/2;
$y = $cy - $h/2;
if ($x < 0) $x = 0;
if ($y < 0) $y = 0;
return $img->crop($x, $y, $w, $h);
}
GD kütüphanesini kullandığınızı farz ediyorum. $ img GD imajıdır, $ w ve $ h sırasıyla genişlik ve yüksekliktir, yeni görüntünüzün olmasını istersiniz. Sizin durumunuzda, $ w = 200, $ h = 130.
Jeez, neden bunu zor yoldan yapıyorsunuz? Sadece basit kullandığım nasıl/2
$imageSize = getimagesize('thumbnail.png');
$croppedImage = imagecrop(imagecreatefrompng('thumbnail.png'), ['x' => 0, 'y' => ($imageSize[1]-$imageSize[0]*(9/16))/2, 'width' => $imageSize[0], 'height' => $imageSize[0]*(9/16)]);
haber kırpmak için miktar olarak x ve y pozisyonlarını ayarlamak benim $ imagesize [0] * (9/16) i y tarafından kırpma am tutar olan yön ve ben kırpma görüntüyü bulmak için orijinal görüntü yüksekliğinden çıkardım, sonra 2'ye bölünür. Genişlik için aynı şeyi yapmak istiyorsanız, aynı adımları takip edin.
Şapkalar kapalı, bu harika ve mükemmel çalışıyor.THanks – June
İlk algoritmada, hangi değişkenler imagecopy() parametrelerine uygun olacaktı? –
@ChrisHarrison Bkz. Https://gist.github.com/philBrown/880506#file-imagemanipulator-php-L185 – Phil