Я хочу обрезать изображение из центра размером 200 * 130, изображение, которое нужно обрезать, может отличаться по размеру, если изображение меньше, мы не будем обрезать его. Я знаю, как эта часть, где я могу проверить высоту и с изображением, но вид ударил в предмет обрезки с середины изображения. Поскольку я не могу понять, как сохранить центр как точку урожая, а не портить его
GD поставляется в комплекте со всеми установками PHP с версии 4.3.6, поэтому есть вероятность, что у вас есть.
Вот шаги, которые вам нужно предпринять …
imagecreatefrom*()
. Тот, который вы используете, зависит от типа изображения, с которым вы имеете дело. imagesx()
и imagesy()
imagecopy()
с помощью 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');
Боже, зачем ты это делаешь? Просто установите позиции 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. Если вы хотите сделать то же самое для ширины, просто выполните те же шаги.
Это может вам помочь.
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.