PHP
29 October 2008

Делаем вебдванольные превьюшки с ImageMagick

Недавно, у меня случилась проблема с GD на сервере — он перестал понимать png, после получаса мытарств, решил посмотреть на ImageMagick и его PHP интерфейс IMagick
После недолгого гугления нашел замечательный блог посвященный Imagick. Там же нашел способ делать красивые превьюшки. Однако, способ, предложенный там, правильно отрабатывал только с png картинками. Я немного поковырялся и сделал свой.

Copy Source | Copy HTML
  1. <?php
  2. $thumb = new Imagick();
  3. //читаем картинку по полному пути
  4. $thumb->readImage($fullpath)
  5. //создаем белый фон
  6. $canvas = new Imagick();
  7. $canvas->newImage($width, $height, new ImagickPixel("white"));
  8. //делаем превью, размер меньше, чем у фона, чтобы было куда впихнуть тень
  9. $thumb->thumbnailImage($width-10, $height-10);
  10.  
  11. //наводим резкость, если превью мелкое
  12. if ($width < 300)
  13.     $thumb->sharpenImage(4, 1);
  14.  
  15. //закругляем углы
  16. $thumb->roundCorners(5, 5);
  17. //делаем копию превьюхи, чтобы сделать тень
  18. $shadow = $thumb->clone();
  19.  
  20. //цвет тени
  21. $shadow->setImageBackgroundColor(new ImagickPixel('black'));
  22. //собственно, делаем тень
  23. $shadow->shadowImage(80, 2.5, 5, 5);
  24.  
  25. //накладываем тень на фон98798798999999999999
  26. $canvas->compositeImage($shadow, $shadow->getImageCompose(),  0,  0);
  27. //накладываем превью на фон
  28. $canvas->compositeImage($thumb, $thumb->getImageCompose(),  0,  0);
  29.  
  30. //убираем комменты и т.п. из картинки
  31. $canvas->stripImage();
  32. //записываем картинку
  33. $canvas->writeImage($writeTo);
  34. //подчищаем за собой
  35. $canvas->destroy();
  36. $shadow->destroy();
  37. $thumb->destroy();
  38. ?>

В итоге получим примерно вот такую картинку;):
490704de9e6b9.jpg - image uploaded to Picamatic
upd:то же самое с русскими комментами http://bin.cakephp.org/view/906967763

+45
14.2k 207
Comments 54
Top of the day