Недавно, у меня случилась проблема с GD на сервере — он перестал понимать png, после получаса мытарств, решил посмотреть на ImageMagick и его PHP интерфейс IMagick
После недолгого гугления нашел замечательный блог посвященный Imagick. Там же нашел способ делать красивые превьюшки. Однако, способ, предложенный там, правильно отрабатывал только с png картинками. Я немного поковырялся и сделал свой.
В итоге получим примерно вот такую картинку;):
![490704de9e6b9.jpg 490704de9e6b9.jpg - image uploaded to Picamatic](http://www.picamatic.com/show/2008/10/29/03/24/1267098_bigthumb.jpg)
upd:то же самое с русскими комментами http://bin.cakephp.org/view/906967763
После недолгого гугления нашел замечательный блог посвященный Imagick. Там же нашел способ делать красивые превьюшки. Однако, способ, предложенный там, правильно отрабатывал только с png картинками. Я немного поковырялся и сделал свой.
Copy Source | Copy HTML
- <?php
- $thumb = new Imagick();
- //читаем картинку по полному пути
- $thumb->readImage($fullpath)
- //создаем белый фон
- $canvas = new Imagick();
- $canvas->newImage($width, $height, new ImagickPixel("white"));
- //делаем превью, размер меньше, чем у фона, чтобы было куда впихнуть тень
- $thumb->thumbnailImage($width-10, $height-10);
-
- //наводим резкость, если превью мелкое
- if ($width < 300)
- $thumb->sharpenImage(4, 1);
-
- //закругляем углы
- $thumb->roundCorners(5, 5);
- //делаем копию превьюхи, чтобы сделать тень
- $shadow = $thumb->clone();
-
- //цвет тени
- $shadow->setImageBackgroundColor(new ImagickPixel('black'));
- //собственно, делаем тень
- $shadow->shadowImage(80, 2.5, 5, 5);
-
- //накладываем тень на фон98798798999999999999
- $canvas->compositeImage($shadow, $shadow->getImageCompose(), 0, 0);
- //накладываем превью на фон
- $canvas->compositeImage($thumb, $thumb->getImageCompose(), 0, 0);
-
- //убираем комменты и т.п. из картинки
- $canvas->stripImage();
- //записываем картинку
- $canvas->writeImage($writeTo);
- //подчищаем за собой
- $canvas->destroy();
- $shadow->destroy();
- $thumb->destroy();
- ?>
В итоге получим примерно вот такую картинку;):
![490704de9e6b9.jpg 490704de9e6b9.jpg - image uploaded to Picamatic](http://www.picamatic.com/show/2008/10/29/03/24/1267098_bigthumb.jpg)
upd:то же самое с русскими комментами http://bin.cakephp.org/view/906967763