PHP манипулирование изображениями - PullRequest
1 голос
/ 02 мая 2011

Я пытаюсь выяснить, как imgur.com создает свою галерею (та, что на главной странице справа).

Моя проблема в том, что я хотел бы создать галерею миниатюр из изображенийДа, но я хочу, чтобы соотношение ширины и высоты было правильным, чтобы изображение не выглядело странно.

Поэтому я не могу просто взять загруженное изображение и изменить высоту и ширину на 100px / 100pxсоотношение отличается.

Они обрезают изображение, а затем создают эскиз?Как они обрезают это?Как они устанавливают коэффициент обрезки?

Спасибо,

Ответы [ 3 ]

4 голосов
/ 02 мая 2011

Рассчитать размер миниатюры ...

$sizes = getimagesize('img.jpg');

$w = $sizes[0];
$h = $sizes[1];

$new_w = 200; // some value
$new_h = $h * ($new_w / $w);

http://www.php.net/manual/en/function.getimagesize.php

В качестве альтернативы, если вы хотите обрезать изображение, используйте некоторую библиотеку PHP. Я бы порекомендовал WigeImage . Его документы хорошо написаны, и он предлагает простую обрезку, изменение размера, зеркальное отображение, вращение и т. Д. :)

Обратите внимание, что для WideImage и других функций изображений, документированных в документах PHP, на вашем сервере должно быть установлено расширение GD.

3 голосов
/ 02 мая 2011

Установите imagick на свой локальный компьютер и поэкспериментируйте с ним, он может сделать все, что вы просите. Спрашивать, как это делают X или Y, не сильно помогает, потому что каждая технология делает это по-своему, в PHP (выбранный вами тег) вы можете сделать это с помощью imagick.

0 голосов
/ 14 сентября 2017

Это очень легко сделать, используя встроенные методы в ImageArtist , который является чистой оболочкой GD OO.

Преимущество использования GD над Imagick заключается в том, что расширение GD поддерживается широким диапазономхостинг-провайдеров, так что ваш код, который работает нормально в большинстве случаев, работает нормально после хостинга.

вот пример кода.

$img = new Image("./cover.jpg");

$img->scaleToWidth(100);  // make the width 100px and make sure to resize height accroding to the ratio
$img->scaleToHeight(100);  // make the hegith 100px and make sure to resize width accroding to the ratio

/* if you want to crop the image */
$img->crop(5,5,90,90);  // this will crop a rectangle keeping 5px border

/* finally save it */
$img2->save("./final.png",IMAGETYPE_PNG);
...