2016-01-08 6 views
0

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

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

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

ответ

0

Существует два основных способа обработки изображений с помощью 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

Спасибо, но, к сожалению, он не отвечает на вопрос. Я не знаю новой высоты и ширины. – doonot

+1

Новая высота и ширина будут зависеть от формата файла, оригинальной высоты и ширины, размера файла и степени его сжатия. Для этого нет ни одного простого ответа. Вам нужно будет провести некоторые исследования и эксперименты, чтобы точно определить, сколько вам нужно, чтобы перемасштабировать изображение для достижения определенной цели размера файла. – jbafford

1

Вы можете попробовать Adaptive Images PHP скрипт.

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

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

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

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

    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; 
    

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

+0

Это звучит очень интересно, но, вероятно, может не сработать, потому что я получаю данные через JSON API. – doonot

+0

Боюсь, что этого не произойдет. Это работает только для изображений, хранящихся в файлах в файловой системе. –