Изображение cakeScale до оптимизированного размера приложения с помощью переполнения стека

Я работаю над приложением, в котором пользователи могут загружать изображения (на мой сервер CakePHP 2.7.2), где они хранятся. Эти изображения время от времени бывают довольно большими (например, изображения iPhone размером около 7-8 МБ).

Приложение показывает эти изображения в приложении (но это занимает очень много времени из-за больших данных, которые необходимо загрузить).

Каков наилучший способ масштабирования изображений до 30 КБ с использованием PHP? Я хочу, чтобы изображения были эффективными по размеру и качеству. Важным требованием является соблюдение соотношения ширины и высоты!

0

Решение

Вы можете попробовать Адаптивные изображения PHP скрипт.

Adaptive Images определяет размер экрана вашего посетителя и автоматически создает, кэширует и доставляет соответствующие масштабированные версии устройства встроенных изображений HTML вашей веб-страницы. Никаких изменений разметки не требуется. Он предназначен для использования с адаптивными дизайнами и должен сочетаться с методами Fluid Image.

Чтобы заставить его работать в CakePHP:

  1. Загрузите его на свой /app/webroot/ папка

  2. Изменить вас /app/webroot/.htaccess и добавьте следующее перед правилами CakePHP mod_rewrite:

    RewriteCond %{REQUEST_URI} !optional_path_to_exclude/
    RewriteRule \.(?:jpe?g|gif|png)$ adaptive-images.php [L]
    
  3. редактировать /app/webroot/adaptive_images.php и заменить строку 16:

    $cache_path    = "ai-cache";
    

    с

    $cache_path    = "/app/tmp/cache/ai-cache/";
    

    и строка 30:

    $source_file    = $document_root.$requested_uri;
    

    с

    $source_file    = $document_root.'/app/webroot'.$requested_uri;
    

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

1

Другие решения

Существует два основных способа обработки изображений с помощью PHP: GD а также ImageMagick.

Для GD изменение масштаба изображения легче всего выполнить с imagecopyresampled (). Вам понадобится код примерно так:

$image = imagecreatefromstring($imageContents); //or one of the image imagecreatefrom* functions
$newImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($newImage, $image, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);

ob_start();
imagepng($newImage, null); //or imagejpeg as appropriate
$output = ob_get_contents();
ob_end_clean();

//do something with $output
0