Знающие, объясните что всетаки лучше?
Написал код выполняющий одну и туже операцию и с GD2 и с Imagick.
Функция с GD выполняется стабильно 0.7 +- 0.03 сек
А функция с Imagick выполняется по разному от 0.45 до 1.15 сек
Тесты повторил 10 раз , с одним и тем же изображением на *nix хостинге.
Вот задумался о целесообразности использования Imagick
1. snikers987 - 30 Октября, 2011 - 19:28:07 - перейти к сообщению
2. DeepVarvar - 30 Октября, 2011 - 19:39:01 - перейти к сообщению
Проверить если маджик есть, юзать маджик, если нет - GD, если ни того ни того - die("Фигвам...");
3. snikers987 - 30 Октября, 2011 - 19:50:52 - перейти к сообщению
Дык есть и то и другое, что лучше?
4. DeepVarvar - 30 Октября, 2011 - 19:54:05 - перейти к сообщению
маджик
5. Champion - 30 Октября, 2011 - 19:59:21 - перейти к сообщению
От потребностей зависит. Если ГД хватает, то ГД. Если картинки портятся, не хватает функционала, то магик.
6. Stierus - 31 Октября, 2011 - 09:43:37 - перейти к сообщению
snikers987,задачи разные бывают. Вы попробуйте провести тест с другим изображением (особенно с большим разрешением, вес не главное, главное - количество точек). Я бы советовал Imagic, потому что в свое время сильно с gd намучался, на каких-то проектах мне и gd с головой хватало.
7. snikers987 - 31 Октября, 2011 - 09:48:56 - перейти к сообщению
Первый пост - изображение было 10 Mpx. Остановился на Imagick, лучшее качество обработки, читабильнее код.
8. Stierus - 31 Октября, 2011 - 10:15:47 - перейти к сообщению
Цитата:
Сколько памяти ждал gd при его обработке (увеличение\уменьшение\наложение watermark) ?
Первый пост - изображение было 10 Mpx
9. snikers987 - 31 Октября, 2011 - 10:34:59 - перейти к сообщению
Точно не знаю, но для проверки того что загружено, ресайза до 400х300 и создания превью 75х57 с GD 32Mb не хватало. GD кричал о не достатке памяти при imagecreatefromjpeg($inputImage);
Imagick + ко всему рисует вотермарк и не жалуется..
(Добавление)
как это собственно можно узнать?
Imagick + ко всему рисует вотермарк и не жалуется..
(Добавление)
Цитата:
Сколько памяти ждал gd при его обработке
как это собственно можно узнать?
10. Stierus - 31 Октября, 2011 - 10:41:36 - перейти к сообщению
11. snikers987 - 31 Октября, 2011 - 17:18:17 - перейти к сообщению
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- imageResize();
- $memory = $end_mem - $start_mem;
- echo "Used memory: ".$memory."<br/>";
По моим подсчетам GD нужно 5.5 мб.. Для изображения 3648х2736 точек.
GD:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function imageResize($width = 400, $thumbWidth = 75, $savePath = './content/images/', $thumbPath = './content/thumbnail/'){
- //изменяем размер оригинальной картинки
- $newExt = '.jpg';
- $imgname = $savePath.$_POST['photo_name_1'];
- $newImgName = $_POST['photo_name_1'];
- $thumbName = "thumb-".$newImgName;
- switch($imgType) {
- }
- ), 8, 0);
- //создаем превью
- ), 8, 0);
- }
Imagick:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- function imageResize($width = 400, $thumbWidth = 75, $savePath = './content/images/', $thumbPath = './content/thumbnail/'){
- //$_POST['photo_name_1'] содержит имя загруженого файла
- $text ='Big-Board.in.ua';
- $newExt = '.jpg'; //saved extension
- $imgname = $savePath.$_POST['photo_name_1'];
- $newImgName = $_POST['photo_name_1'];
- $thumbName = "thumb-".$newImgName;
- //Resize original image
- $imgResized = new Imagick($imgname);
- $imgResized->setCompression(Imagick::COMPRESSION_JPEG);
- $imgResized->setCompressionQuality(90);
- $imgResized->setImageFormat('jpeg');
- $imgResized->resizeImage($width,$new_h,Imagick::FILTER_LANCZOS,1);
- $draw = new ImagickDraw();
- $color = new ImagickPixel('#6f6e76');
- $draw->setFillColor($color);
- $draw->setFontSize(25);
- $draw->setFillAlpha( 1.0 );
- //$draw->setFillColor('#000000');
- $draw->setGravity( Imagick::GRAVITY_SOUTHEAST );
- $draw->setStrokeAntialias(true);
- $draw->setTextAntialias(true);
- //$draw->annotation(0, 40, $text);
- $imgResized->annotateImage( $draw, 10, 10, 0, $text );
- $imgResized->writeImage($imgRezizedRename);
- $imgResized->clear();
- $imgResized->destroy();
- //Create preview image
- $imgResized = new Imagick($imgRezizedRename);
- $imgResized->resizeImage($thumbWidth,$new_h,Imagick::FILTER_LANCZOS,1);
- $imgResized->writeImage($imgThumbRename);
- $imgResized->clear();
- $imgResized->destroy();
- //Send new image name, method POST
- $_POST['photo_name_1'] = $imageName;
- }