Я хочу обрезать изображение из центра размером 200 * 130, изображение, которое нужно обрезать, может отличаться по размеру, если изображение меньше, мы не обрезаем его. Я знаю, как эта часть, где я могу проверить высоту и с помощью изображения, но вид ударил в предмет обрезки с середины изображения Поскольку я не могу понять, как сохранить центр в качестве точки урожая, а не портить его
Обрезать изображение из центра PHP
Ответ 1
GD поставляется вместе со всеми установками PHP с версии 4.3.6, поэтому есть вероятность, что у вас есть.
Вот шаги, которые вам нужно предпринять...
- Создайте ресурс изображения, используя одну из функций GD
imagecreatefrom*()
. Тот, который вы используете, зависит от типа изображения, с которым вы имеете дело с - Определите размеры изображения с помощью
imagesx()
иimagesy()
- Определите координаты катушки, используя следующий алгоритм и обрезку, используя
imagecopy()
Найти скользящие координаты
$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);
Не стесняйтесь использовать мой класс манипуляции с изображениями, он должен сделать некоторые аспекты намного проще - https://gist.github.com/880506
$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');
Ответ 2
Боже, почему ты это делаешь? Просто установите значения x и y как количество урожая /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)]);
Обратите внимание, как я использовал мой $imageSize [0] * (9/16), который является суммой, которую я обрезаю в направлении y, и я вычитал это из исходной высоты изображения, чтобы найти количество урожая, а затем деленное на 2. Если вы хотите сделать то же самое для ширины, просто выполните те же шаги.
Ответ 3
Это может вам помочь.
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. $img - это изображение GD, $w и $h - ширина и высота, соответственно, для вашего нового изображения. В вашем случае $w = 200, $h = 130.