Изменение размера изображения PHP с использованием интерполяции ближайшего соседа? - PullRequest
5 голосов
/ 25 декабря 2010

У меня есть спрайт 16x16 в формате PNG или GIF, и я хотел бы отобразить его на веб-сайте с разрешением 64 x 64 во всей его пиксельной славе. В Firefox 3.6+ и IE я легко могу сделать это с помощью CSS, используя image-рендеринг и -ms-interpolation-mode , но так как это работает не во всех браузерах, я бы хотел изменить размер изображения на Муха, используя вместо этого PHP. Каков наилучший способ изменения размера изображений с использованием интерполяции ближайшего соседа в PHP?

Ответы [ 5 ]

6 голосов
/ 02 января 2011

Если вы хотите сохранить пикселизацию во время изменения размера, вы захотите сделать что-то вроде этого, используя библиотеку GD:

<?php
// create GD image resource from source image file
$src = imagecreatefromgif('test.gif');

// create new GD image resource with indexed color
$dest = imagecreate(64, 64);

// copy/resize image without resampling
imagecopyresized($dest, $src, 0, 0, 0, 0, 64, 64, 16, 16);

// output result
header('Content-type: image/gif');
imagegif($dest);
?>

Я проверил код, и пикселизация остается в такте.Вам придется адаптировать код так, чтобы он также принимал файлы png в качестве входных данных, что должно быть довольно просто, поскольку каждая из функций GD GIF также имеет соответствующие функции png.Надеюсь, это поможет.

1 голос
/ 28 декабря 2010

http://www.imagemagick.org/Usage/misc/#interpolate

http://www.francodacosta.com/blog/phmagick/examples/resizing-images

Это немного информации относительно интерполяции в imagemagick. Вторая ссылка относится к классу phMagick, который является полнофункциональной оболочкой для библиотек imagemagick. Связанный пример предназначен для базовых операций изменения размера, но для него не установлены флаги интерполяции для вызова командной строки, который выполняет библиотека.

Вы do имеете полный доступ к командной строке через класс, и если отсутствует поддержка флага интерполяции, существует простой механизм расширения класса с помощью плагинов. Это также php5 готов.

Если это не укажет вам правильное направление, я не знаю, что будет. Если ничто иное, классы phMagick не должны дать вам хорошей отправной точки для написания более компактной оболочки для ваших конкретных целей.

1 голос
/ 25 декабря 2010

Вы можете использовать проект ImageMagick , если вам также нужно изменить размер GIF.

Вы можете использовать GD, но, возможно, вы потеряете некоторые данные EXIF.

Проект KusabaX имеет отличную функцию для преобразования изображения. Проверьте файл "/inc/func/posts.php" в строке 58.; -)

0 голосов
/ 03 января 2011

Symphony - это великолепный PHP-фреймворк, в котором используется JIT-манипулятор , который делает все это очень просто! : P

Изображение в вашем случае будет

<img src="http://yoursite.com/image/1/64/64/0/images/16pixels.jpg"/>
0 голосов
/ 28 декабря 2010

Ответ не имеет значения.Кэшируйте результат.Сохраните бумажную копию результата и выведите ее.Делайте это только один раз, если изображение никогда не меняется, не меняя и идентификационную информацию.

Вы можете утверждать, что это неправильный ответ.Это не то, что вы просили.Но это ЛУЧШИЙ ответ.Это сэкономит большую часть времени обработки.К моменту, когда начальное время изменения размера изображения в первую очередь становится спорным, рендеринг может занять 30 секунд, и это затронет только одного человека, один раз.

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