PHP - обрезать изображение с помощью imagecopyresampled ()? - PullRequest
7 голосов
/ 11 февраля 2011

Я хотел бы обрезать изображение, используя imagecreatetruecolor, и оно всегда обрезает его, оставляя черные пятна, или слишком большое увеличение.Я хочу, чтобы изображение было точно 191px в ширину и 90px в высоту, поэтому мне также нужно изменить размер изображения, а также обрезать, потому что соотношение должно быть сохранено.Ну, есть несколько примеров проекта:

enter image description here

Скрипт изменения размера (упрощенный) выглядит так:

$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 ['crop'] массив включает в себя:

['x'] => $_POST['inp-x']
['y'] => $_POST['inp-x']
['width'] => $_POST['inp-width']
['height'] => $_POST['inp-height']

Но что я получаю:

enter image description here

Кто-нибудь видит, что я делаю неправильно?

Спасибо, Майк.

Ответы [ 4 ]

4 голосов
/ 07 июля 2013

вы тоже можете это сделать, я сам это сделал, и это работает

(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);
1 голос
/ 11 февраля 2011

Попробуйте

<?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);
0 голосов
/ 26 марта 2014

Существует также функция imagecrop , которая позволяет передавать в массив значения x, y, width и height.

0 голосов
/ 11 февраля 2011

Хорошо, я сам нашел проблему, код должен быть таким:

imagecopyresampled($dst_img, $src_img, 0, 0, $newImage['crop']['x'], $newImage['crop']['y'], $newImage['newWidth'], 191, 90, $newImage['crop']['height']); 
...