Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с графическими функциями в Php

10K
25 мая 2006 года
supergis
27 / / 06.01.2006
Добрый день
У меня такой вопрос хочу сделать скрипт который бы уменьшал загружаемые фотографии до нужного размера в байтах
вот например создаю изображение из файла
$org=ImageCreateFromJpeg($rfile);
$w_src = imagesx($org);
$h_src = imagesy($org);
далее создаю уменьшенную копию
$w_cop=$w_src-50; $h_cop=$h_src-50;
$cop=imagecreatetruecolor($w_cop,$h_cop);
уменьшаю изображение
imagecopyresampled($cop, $org, 0, 0, 0, 0, $w_cop, $h_cop,$w_src ,$h_src );
А вот вопрос как узнать размер копии $cop в байтах
8
26 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by supergis
А вот вопрос как узнать размер копии $cop в байтах


Много. В памяти - это рисунок BMP. Зачем нужно знать его размер, если вывод будет всё-равно в jpg, gif или png?

10K
26 мая 2006 года
supergis
27 / / 06.01.2006
Просто у меня есть фотогаллерея, но я не хочу чтобы закачивали рисунки более 100Кб,
И я так понимаю что придёться уменьшать записывать в файл смотреть размер если большой то всё по кругу ??
8
26 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by supergis
Просто у меня есть фотогаллерея, но я не хочу чтобы закачивали рисунки более 100Кб,
И я так понимаю что придёться уменьшать записывать в файл смотреть размер если большой то всё по кругу ??


Стоп! А при чём тут графика? Размер закачиваемого файла узнаётся с помощью filesize()

10K
26 мая 2006 года
supergis
27 / / 06.01.2006
Например мне в галлерею закачали фото размером 600Кб, а я хочу уменьшить фото чтобы оно занимало 100Кб и сохранить уменьшенный вариант.
8
26 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by supergis
Например мне в галлерею закачали фото размером 600Кб, а я хочу уменьшить фото чтобы оно занимало 100Кб и сохранить уменьшенный вариант.


Ну, тогда да: записывать, проверять размер, и если не подходит - сжимать ещё и вновь записывать и проверять.
Т.е., примерно такая конструкция:

 
Код:
$quality = 100;
while(filesize($filename)>102400){
    imagejpeg($img, $filename, $quality--);
}
/*
Где $quality - качество сжатия JPEG, $filename - имя файла, куда всё это записывается, $img - дескриптор записываемого изображения.
*/
10K
26 мая 2006 года
supergis
27 / / 06.01.2006
1.Я бы хотел кменьшить размер картинки не в смысле занимаемого места на диске, а размеры высота и ширина.
2. Попробовал твой цикл у меня значение
filesize($filename)
почему то не изменяется.
3. Еще я пробовал так

Но размер значение
filesize($filename)
почему то то же не изменяется.
Код:
$s_umen=50;  
$w_src = imagesx($img);  
$h_src = imagesy($img);  
$ppr=$h_src/$w_src;  
while(filesize($filename)>102400){
$w_cop=$w_src-$s_umen; $h_cop=round($w_cop*$ppr);
$cop=imagecreatetruecolor($w_cop,$h_cop);
imagecopyresampled($cop, $img, 0, 0, 0, 0, $w_cop,$h_cop,$w_src ,$h_src );  
imageJpeg($cop,$filename);  
$s_umen=$s_umen+50;          
                                   }
8
26 мая 2006 года
mfender
3.5K / / 15.06.2005
Сейчас раскинул мозги об клавиши и монитор, и решил, что можно файлы и не записывать для проверки:

 
Код:
ob_start();
imagejpeg($img, null, $quality);
$filesize = ob_get_length();
ob_end_clean();

Т.е., создаём буфер, в нём и будет сжатый в jpeg рисунок. проверяем размер буфера, не забыв его потом уничтожить. В конце-концов, если размерчик удовлетворяет - записываем в файл.
10K
26 мая 2006 года
supergis
27 / / 06.01.2006
Вообщем кажется работает,
но если использовать
 
Код:
imagejpeg($img, null, 100);

то размер файла выдаёт больше оригинала , а если
 
Код:
imagejpeg($img, null);

то наоборот маленькое число ?
8
26 мая 2006 года
mfender
3.5K / / 15.06.2005
Цитата:
Originally posted by supergis
Вообщем кажется работает,
но если использовать
 
Код:
imagejpeg($img, null, 100);

то размер файла выдаёт больше оригинала , а если
 
Код:
imagejpeg($img, null);

то наоборот маленькое число ?


Ну, ты инструкцию к imagejpeg читал? Опциональное число (в данном случае - 100) - это сжатие. Т.е., 100 - это практически без сжатия. Конечно будет больше оригинала. А если сжатие не указывать - дефолтом там 75.

10K
27 мая 2006 года
supergis
27 / / 06.01.2006
Использовал
 
Код:
imagejpeg($img, null, 75);

Всё работаем, качество нормальное.
СПАСИБО за помощь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог