Пробел обрезки из изображения в PHP

Вот еще лучший способ сделать это, действительно рекурсивно. Я, может казаться, не получаю Ваше решение пойти больше чем 1 уровень глубоко:

<LibraryFiles  
    Include="$(LibrariesReleaseDir)**\*.*"  
    Exclude="$(LibrariesReleaseDir)**\.svn\**\*.*"/>
25
задан usertest 3 November 2009 в 20:02
поделиться

3 ответа

Чтобы обрезать все пробелы, как вы это называете, окружающие интересную часть изображения, сначала мы выясняем, где заканчивается «пробел», а затем копируем все внутри этих границ.

//load the image
$img = imagecreatefromjpeg("http://ecx.images-amazon.com/images/I/413XvF0yukL._SL500_AA280_.jpg");

//find the size of the borders
$b_top = 0;
$b_btm = 0;
$b_lft = 0;
$b_rt = 0;

//top
for(; $b_top < imagesy($img); ++$b_top) {
  for($x = 0; $x < imagesx($img); ++$x) {
    if(imagecolorat($img, $x, $b_top) != 0xFFFFFF) {
       break 2; //out of the 'top' loop
    }
  }
}

//bottom
for(; $b_btm < imagesy($img); ++$b_btm) {
  for($x = 0; $x < imagesx($img); ++$x) {
    if(imagecolorat($img, $x, imagesy($img) - $b_btm-1) != 0xFFFFFF) {
       break 2; //out of the 'bottom' loop
    }
  }
}

//left
for(; $b_lft < imagesx($img); ++$b_lft) {
  for($y = 0; $y < imagesy($img); ++$y) {
    if(imagecolorat($img, $b_lft, $y) != 0xFFFFFF) {
       break 2; //out of the 'left' loop
    }
  }
}

//right
for(; $b_rt < imagesx($img); ++$b_rt) {
  for($y = 0; $y < imagesy($img); ++$y) {
    if(imagecolorat($img, imagesx($img) - $b_rt-1, $y) != 0xFFFFFF) {
       break 2; //out of the 'right' loop
    }
  }
}

//copy the contents, excluding the border
$newimg = imagecreatetruecolor(
    imagesx($img)-($b_lft+$b_rt), imagesy($img)-($b_top+$b_btm));

imagecopy($newimg, $img, 0, 0, $b_lft, $b_top, imagesx($newimg), imagesy($newimg));

//finally, output the image
header("Content-Type: image/jpeg");
imagejpeg($newimg);

Мой старый пример, который предполагает идентичную «границу» на всех сторонах изображения, просто чтобы прояснить комментарии:)

//load the image
$img = imagecreatefromjpeg("img.jpg");

//find the size of the border.
$border = 0;
while(imagecolorat($img, $border, $border) == 0xFFFFFF) {
  $border++;
}

//copy the contents, excluding the border
//This code assumes that the border is the same size on all sides of the image.
$newimg = imagecreatetruecolor(imagesx($img)-($border*2), imagesy($img)-($border*2));
imagecopy($newimg, $img, 0, 0, $border, $border, imagesx($newimg), imagesy($newimg));

//finally, if you want, overwrite the original image
imagejpeg($newimg, "img.jpg");
52
ответ дан 28 November 2019 в 17:58
поделиться

Ознакомьтесь с библиотекой ImageMagick на PHP. В нем есть хорошие методы работы с изображениями (включая обрезку ).

Вам нужно будет выяснить, где «пробелы» вокруг изображения. Это может быть сложно, поскольку «пробелом» может быть белый цвет, какой-то другой цвет, прозрачность и т. Д.

1
ответ дан 28 November 2019 в 17:58
поделиться

Я знаю, что это довольно старый метод, но если у вас включен ImageMagick, вы можете использовать этот метод

Обрезать изображение

6
ответ дан 28 November 2019 в 17:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: