Очень часто приходится обрабатывать большое количество графики, например, чтобы уменьшить размер картинок для публикации в сети. Причем иногда нужно уменьшать не только размер файла в байтах, но и пиксели.
К примеру, если вы хотите отправить фотографии, которые снимали качественным фотоаппаратом. Такой файл может иметь размер более 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