PHP - обрезка изображения с помощью imagecopyresampled()?
Я хотел бы обрезать изображение с помощью imagecreatetruecolor, и он всегда обрезает его, оставляя черные пробелы, или масштаб слишком велик. Я хочу, чтобы изображение было ровно 191 пикселей в ширину и 90 пикселей в высоту, поэтому мне также нужно изменить размер изображения, а также обрезать, потому что соотношение должно быть сохранено. Ну, есть несколько примеров проекта:
Сценарий изменения размера (упрощенный) выглядит следующим образом:
$src_img=imagecreatefromjpeg($photoTemp);
list($width,$height)=getimagesize($photoTemp);
$dst_img=imagecreatetruecolor(191, 90);
imagecopyresampled($dst_img, $src_img, 0, 0, $newImage['crop']['x'], $newImage['crop']['y'], $newImage['crop']['width'], $newImage['crop']['height'], $width, $height);
Массив $newImage['обрезка'] включает в себя:
['x'] => $_POST['inp-x']
['y'] => $_POST['inp-x']
['width'] => $_POST['inp-width']
['height'] => $_POST['inp-height']
Но что я получаю является:
Кто-нибудь видит, что я делаю не так?
Спасибо, Майк.
4 answers
Вы тоже можете это сделать, я сам это сделал, и это работает
(x1,y1)=> где начинается обрезка
(x2,y2)=> где заканчивается обрезка
$filename = $_GET['imageurl'];
$percent = 0.5;
list($width, $height) = getimagesize($filename);
$new_width = $_GET['x2'] - $_GET['x1'];
$new_height = $_GET['y2'] - $_GET['y1'];
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0 , $_GET['x1'] , $_GET['y1'] , $new_width, $new_height, $new_width, $new_height);
// Outputs the image
header('Content-Type: image/jpeg');
imagejpeg($image_p, null, 100);
Попробуйте
<?php
$dst_img = imagecreatetruecolor($newImage['crop']['width'], $newImage['crop']['height']);
imagecopyresampled($dst_img, $src_img, 0, 0, $newImage['crop']['x'], $newImage['crop']['y'], 0, 0, $width, $height);
Хорошо, я сам нашел проблему, код должен быть таким:
imagecopyresampled($dst_img, $src_img, 0, 0, $newImage['crop']['x'], $newImage['crop']['y'], $newImage['newWidth'], 191, 90, $newImage['crop']['height']);
Существует также функция imagecrop, которая позволяет передавать массив с x
, y
, width
, и height
значения.