Немного обо всем интересном
На главную Обратная связь Поиск
Главная
Форум
 
 
 
  Статьи Файлы Видео Кулинарные рецепты Города и Страны Разное  
Отдых и развлечения Юмор Видео, ТВ и музыка Непознанное Литература Спорт Игры Хобби
Окружающий мир Люди Страны и города География Флора и фауна Космос
Технологии Hardware Операционные системы Софт Интернет Мобильные устройства Сети и сетевая безопасность Разное
Дизайн и программирование Веб-строительство Дизайн и графика

Все статьи Список статей Добавить статью
 
Вниз
Обработка сервером файлов JPEG


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

   К примеру, если вы хотите отправить фотографии, которые снимали качественным фотоаппаратом. Такой файл может иметь размер более 2мб. и размеры под 3456x2304 пикселей. Если таких фотографий около 100, то отослать их будет проблематично, и обрабатывать каждый отдельно (уменьшать пиксели и сжимать) тоже.

   Для упрощения обработки графики можно воспользоваться сервером с библиотекой GD и приведенным ниже кодом.

   Сначала проверим, установлена ли у нас библиотека GD.
   Для этого создадим в корне файл info.php с кодом:

<?
$array
=gd_info ();
foreach (
$array as $key=>$val) {

if (
$val===true) {
$val="Enabled";
}

if (
$val===false) {
$val="Disabled";
}

echo
"$key: $val <br />\n";

}
?>


   Данный скрипт работает только с изображениями JPG, поэтому смотрим следующее: JPG Support: Enabled. Если так, то идем далее.

   Создадим в корне папку image1, в которую положим наши рисунки и папку image2, в которую будут записаны обработанные изображения.

   Создадим файл image.php, с одним из приведенным ниже кодом:

Код ниже просто изменит качество изображений, оставляя их размеры (пиксели) такими же.
Качество задается параметром $quality = 80;
Уменьшая значение будет уменьшаться качество изображения и тем самым его размер в байтах.

<?php
set_time_limit
(0);
if (
$handle = opendir('image1')) {

while (
false !== ($file = readdir($handle))) {

$filedir = "image1/$file";
$type = explode(".",$file);
$type = end($type);
$type = strtoupper($type);
if((
$type =='JPG') or ($type =='JPEG')) {

$res = copy($filedir, "image2/$file");
$path_real = "image2/$file";
$src_img=ImageCreateFromJpeg("$path_real");

$quality = 80; //качество изображения
ImageJpeg($src_img, $path_real, $quality);
ImageDestroy($src_img);
echo
"Файл: <b>$file</b> - <font style=\"color:green\">обработан</font><br>";
} else {
if (
$file != "." && $file != "..") {
echo
"Файл: <b>$file</b> - <font style=\"color:red\">не обработан</font><br>";
}
}
}

closedir($handle);
}
?>


Код ниже изменит качество изображений, и размеры (пиксели).
Качество задается параметром $quality = 80;
Уменьшая значение будет уменьшаться качество изображения и тем самым его размер в байтах.

Высота нового изображения задается параметром $dest_height = 768;
Можно подобрать любую высоту для нового изображения. Для эскиза подойдет высота 100, для фото вполне нормально 600-800.

<?php
set_time_limit
(0);
if (
$handle = opendir('image1')) {
while (
false !== ($file = readdir($handle))) {
$filedir = "image1/$file";
$type = explode(".",$file);
$type = end($type);
$type = strtoupper($type);
if((
$type =='JPG') or ($type =='JPEG')) {

$res = copy($filedir, "image2/$file");
$path_real = "image2/$file";
$src_img=ImageCreateFromJpeg("$path_real");
$src_width=ImagesX($src_img);
$src_height=ImagesY($src_img);

$dest_height = 768; //высота изображения
$dest_width=$src_width/($src_height/$dest_height);
$quality = 80; //качество изображения

$dest_img=ImageCreateTrueColor($dest_width, $dest_height);
ImageCopyResampled($dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);
ImageJpeg($dest_img, $path_real, $quality);
ImageDestroy($dest_img);
ImageDestroy($src_img);
echo
"Файл: <b>$file</b> - <font style=\"color:green\">обработан</font><br>";
} else {
if (
$file != "." && $file != "..") {
echo
"Файл: <b>$file</b> - <font style=\"color:red\">не обработан</font><br>";
}}}
closedir($handle);
}
?>


Код ниже изменит качество изображений, и размеры (пиксели) в процентом соотношении от оригинала.
Качество задается параметром $quality = 80;
Уменьшая значение будет уменьшаться качество изображения и тем самым его размер в байтах.

Процент изображения задается параметром $procent = 90;
Можно подобрать любое соотношение для нового изображения. При значении 90 новое изображение будет составлять 90% от оригинала.

<?php
set_time_limit
(0);
if (
$handle = opendir('image1')) {
while (
false !== ($file = readdir($handle))) {
$filedir = "image1/$file";
$type = explode(".",$file);
$type = end($type);
$type = strtoupper($type);
if((
$type =='JPG') or ($type =='JPEG')) {

$res = copy($filedir, "image2/$file");
$path_real = "image2/$file";
$src_img=ImageCreateFromJpeg("$path_real");
$src_width=ImagesX($src_img);
$src_height=ImagesY($src_img);

$procent = 90; //процент от изображения
$dest_height = ($src_height/100)*$procent;
$dest_width=$src_width/($src_height/$dest_height);
$quality = 80; //качество изображения

$dest_img=ImageCreateTrueColor($dest_width, $dest_height);
ImageCopyResampled($dest_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height);
ImageJpeg($dest_img, $path_real, $quality);
ImageDestroy($dest_img);
ImageDestroy($src_img);
echo
"Файл: <b>$file</b> - <font style=\"color:green\">обработан</font><br>";
} else {
if (
$file != "." && $file != "..") {
echo
"Файл: <b>$file</b> - <font style=\"color:red\">не обработан</font><br>";
}}}
closedir($handle);
}
?>


Alexander-V-Sh

Данные:
Просмотров: 4158
Рейтинг: 5
Голосов: 1
Средний бал: 5
Комментариев: 1
Добавлен: 21.05.2007

Оценить:

Функции:



Шрифт:   +  -

Разместил: Alexander-V-Sh
Посмотреть все статьи этого пользователя
Комментарии:

Разместил гость Vargo06.04.2009

Хорошо работает, только вот ImageCopyResampled имеет ограничения и те же фото, о которых и для которых речь шла (размер более 2мб. и размеры под 3456x2304 пикселей), скрипт не потянет... на личном примере ImageCopyResampled позволил сливать фотку не более 2000000 пикселей тобишь около 1200х1700 а вот как бы больше прихватнуть


 
Добавить комментарий:

Оставлять комментарии могут только зарегистрированные пользователи.
Возможно заинтересует: • 
Вверх
2006-2010 Интересное.инфо.
При использовании или копировании материалов не забываем ссылку на http://interesnoe.info