Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Почему функция resizeimg() сжимает качество изображения?
 
 автор: Dimka31   (29.01.2009 в 14:24)   письмо автору
 
 

Эта функция из книги Головоломки на PHP для хакеров

<?php
  
function resizeimg($filename$smallimage$w$h
  { 
    
// 1. Коррекция параметров $w и $h
    // Определим коэффициент сжатия изображения
    
$ratio $w $h
    
// Получим размеры исходного изображения 
    
list($width$height) = getimagesize($filename); 
    
// Если размеры меньше, то масштабирования не нужно 
    
if (($width $w) && ($height $h))
    {
      
copy($filename$smallimage);
      return 
true
    }
    
// получим коэффициент сжатия исходного изображения 
    
$src_ratio $width$height

    
// Вычисляем размеры уменьшенной копии, чтобы 
    // при масштабировании сохранились 
    // пропорции исходного изображения 
    
if ($ratio $src_ratio$h $w/$src_ratio
    else 
$w $h*$src_ratio

    
// 2. Создание уменьшенной копии изображения
    // Создаем пустое изображение 
    // размером $w x $h пикселов
    
$dest_img imagecreatetruecolor($w$h);   
    
// Открываем файл, который будет подвергаться сжатию
    
$src_img imagecreatefromjpeg($filename);                       

    
// Масштабируем изображение
    
imagecopyresampled($dest_img
                       
$src_img
                       
0
                       
0
                       
0
                       
0
                       
$w
                       
$h
                       
$width
                       
$height);
    
// Сохраняем уменьшенную копию в файл 
    
imagejpeg($dest_img$smallimage);                       
    
// Чистим память от созданных изображений 
    
imagedestroy($dest_img); 
    
imagedestroy($src_img); 
    return 
true;          
  }   
?>


Просмотрел эту всю но так и не нашел параметра контролирующий степень сжатия.
Даже если загружать изображение того же разрешения, что и функция уменьшает, после действия этой функции изображения весит меньше.
Придумал этой функции интересное применение автоматическое создание уменьшанной копии, то есть загружаем одну фотку получаем еще и превью, учень удобно не нужно подготавливать изображения для загрзку, но так как они сжимаются клиенты не давольны.
Есть ли способ решить проблему?
Заранее благодарен!

  Ответить  
 
 автор: sim5   (29.01.2009 в 14:29)   письмо автору
 
   для: Dimka31   (29.01.2009 в 14:24)
 

Здесь причина проблемы, третий параметр функции. По умолчанию 75%.

  Ответить  
 
 автор: Николай2357   (29.01.2009 в 14:58)   письмо автору
 
   для: Dimka31   (29.01.2009 в 14:24)
 

Вот эта лучше функция, для трёх форматов и размер одним аргументом.
<?
function resize($file$small$r )  
{
  
$img getimagesize($file); 
 
    if ((
$img[0] < $r) && ( $img[1] < $r)) 
    return 
true;
    
$w $h $r;      
$s $img[0] / $img[1];  
    if (
$r $s)  
    
$h $r $s;  
    else  
    
$w $r $s;  
       
$dest imagecreatetruecolor($w$h);    
$white imagecolorallocate($dest255255255); 
        
    if (
$img[2]==2)  $src imagecreatefromjpeg($file);                        
    else if (
$img[2]==1$src imagecreatefromgif($file);                        
    else if (
$img[2]==3$src imagecreatefrompng($file);
       
imagecopyresampled($dest$src0000$w$h$img[0], $img[1]);                  
  
    if (
$img[2]==2)  imagejpeg($dest$small90);                        
    else if (
$img[2]==1imagegif($dest$small90);                        
    else if (
$img[2]==3imagepng($dest$small90);   

imagedestroy($dest);  
imagedestroy($src);  
    return 
true;           
  } 
 
// Аргументы - Уменьшаемый файл, путь до превью, максимальный размер 
resize("1.jpg""2.jpg"50);     
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования