Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Некорректная работа с графикой
Форумы портала PHP.SU » » Графика в PHP » Некорректная работа с графикой

Страниц (1): [1]
 

1. Asheronliner - 01 Июня, 2011 - 10:05:46 - перейти к сообщению
Всем привет! Понадобилось уменьшать размер картинки в PHP. Написал скрипт, картинка уменьшается в размерах, но почему-то цвета почти пропадают после уменьшения. Помогите разобраться, пожалуйста! В чём дело?

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $pic = imagecreatefromjpeg("Natalia001.jpg");
  3. $s = getimagesize("Natalia001.jpg");
  4. $tw = $s[0]/3;
  5. $th = $s[1]/3;
  6. $res = imagecreate($tw,$th);
  7. imagecopyresized($res,$pic,0,0,0,0,$tw,$th,$s[0],$s[1]);
  8. imagejpeg($res,"pic.jpg",100);
  9. ?>
2. vlados - 01 Июня, 2011 - 10:11:23 - перейти к сообщению
Asheronliner ты где-то уменьшаешь количество цветов. Я помог бы, но не знаю гд....
(Добавление)
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. /**
  3. * JPEGReducer class version 1
  4. * 25 November 2004
  5. * reduce size of jpeg file on the fly
  6. * Author: huda m elmatsani
  7. * Email : justhuda ## netscape ## net
  8. *
  9. * Description:
  10. * Usually we reduce the size of jpeg file by changing the quality factor,
  11. * as provided by imagejpeg() function, but with this method we can not
  12. * produce the image with expected file size easyly.
  13. * JPEGReducer class can help us to reduce image size with easy
  14. * by setting file size as variable.
  15. *
  16. * sintax:
  17. * $im = new JPEGReducer(jpeg_file_path, expected_size);
  18. *
  19. * example
  20. * $im = new JPEGReducer("jakarta.jpg",15000);
  21. * $im->OutputImage();
  22. *
  23. */
  24.  
  25. Class JPEGReducer {
  26.      
  27.     var $imgname;
  28.     var $imgsize;
  29.     var $orgsize;
  30.      
  31.     function JPEGReducer($imgname,$imgsize) {
  32.         $this->imgname = $imgname;
  33.         $this->imgsize = $imgsize;
  34.         $this->orgsize = filesize($imgname);
  35.     }
  36.      
  37.     function AcceptedSize() {
  38.         if($this->imgsize < $this->orgsize) return 1;
  39.         else return 0;
  40.     }
  41.     //courtesy vic at zymsys dot com
  42.     function LoadJpeg () {
  43.         $imgname = $this->imgname;
  44.          
  45.         $im = @imagecreatefromjpeg ($imgname); /* Attempt to open */
  46.         if (!$im) { /* See if it failed */
  47.             $im  = imagecreate (150, 30); /* Create a blank image */
  48.             $bgc = imagecolorallocate ($im, 255, 255, 255);
  49.             $tc  = imagecolorallocate ($im, 0, 0, 0);
  50.             imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
  51.             /* Output an errmsg */
  52.             imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
  53.         }
  54.         return $im;
  55.     }
  56.      
  57.     function CalculateQFactor()  {
  58.          
  59.         $im   = $this->LoadJpeg();
  60.         $size = $this->imgsize;
  61.          
  62.         //create sample data of 75%, 50%, and 25% quality
  63.         ob_start();
  64.         imagejpeg($im,'',75);
  65.         $buff75 = ob_get_contents();
  66.         ob_end_clean();
  67.          
  68.         ob_start();
  69.         imagejpeg($im,'',50);
  70.         $buff50 = ob_get_contents();
  71.         ob_end_clean();
  72.          
  73.         ob_start();
  74.         imagejpeg($im,'',25);
  75.         $buff25 = ob_get_contents();
  76.         ob_end_clean();
  77.          
  78.         //calculate size of each image
  79.         $size75 = strlen($buff75);
  80.         $size50 = strlen($buff50);
  81.         $size25 = strlen($buff25);
  82.          
  83.         //calculate gradient of size reduction by quality
  84.         $mgrad1 = 25/($size50-$size25);
  85.         $mgrad2 = 25/($size75-$size50);
  86.         $mgrad3 = 50/($size75-$size25);
  87.         $mgrad  = ($mgrad1+$mgrad2+$mgrad3)/3;
  88.          
  89.         //result of approx. quality factor for expected size
  90.         return round($mgrad*($size-$size50)+50);
  91.     }
  92.      
  93.      
  94.     function OutputImage() {
  95.          
  96.         $im         = $this->LoadJpeg();
  97.         header("Content-type: image/jpeg");
  98.         if($this->AcceptedSize()){
  99.             $Qfactor    = $this->CalculateQFactor();
  100.             imagejpeg($im,'',$Qfactor);
  101.         }
  102.         else imagejpeg($im);
  103.          
  104.          
  105.     }
  106.      
  107.     function SaveImage($imgname) {
  108.          
  109.         $im         = $this->LoadJpeg();
  110.         if($this->AcceptedSize()){
  111.             $Qfactor    = $this->CalculateQFactor();
  112.             imagejpeg($im,$imgname,$Qfactor);
  113.         }
  114.         else imagejpeg($im,$imgname);
  115.          
  116.     }
  117. }
  118. ?>
  119.  



PHP:
скопировать код в буфер обмена
  1.  
  2.     <?PHP
  3.     /**
  4.     * $filename string = 'img.jpg' - путь к изображению
  5.     * $percent string  = 300 - ширина уменьшенной копии картинки
  6.     * $quality string  = 0-100 - качество изображения (только для JPG)
  7.     **/
  8.     function resize ($filename, $size = 300, $quality = 85)
  9.     {
  10.         /**
  11.         * Адрес директории для сохранения картинки
  12.         */
  13.         $dir  = '/images/';
  14.        
  15.         /**
  16.         * Извлекаем формат изображения, то есть получаем
  17.         * символы находящиеся после последней точки
  18.         */
  19.         $ext  = strtolower(strrchr(basename($filename), "."));
  20.        
  21.         /**
  22.         * Допустимые форматы
  23.         */
  24.         $extentions = array('.jpg', '.gif', '.png', '.bmp');
  25.    
  26.         if (in_array($ext, $extentions)) {  
  27.              $percent = $size; // Ширина изображения миниатюры
  28.        
  29.              list($width, $height) = getimagesize($filename); // Возвращает ширину и высоту
  30.              $newheight    = $height * $percent;
  31.              $newwidth    = $newheight / $width;
  32.        
  33.              $thumb = imagecreatetruecolor($percent, $newwidth);
  34.        
  35.              switch ($ext) {
  36.                  case '.jpg':
  37.                      $source = @imagecreatefromjpeg($filename);
  38.                      break;
  39.                
  40.                   case '.gif':
  41.                      $source = @imagecreatefromgif($filename);
  42.                      break;
  43.                
  44.                   case '.png':
  45.                      $source = @imagecreatefrompng($filename);
  46.                      break;
  47.                
  48.                   case '.bmp':
  49.                       $source = @imagecreatefromwbmp($filename);
  50.               }
  51.    
  52.              /**
  53.             * Функция наложения, копирования изображения
  54.             */
  55.             imagecopyresized($thumb, $source, 0, 0, 0, 0, $percent, $newwidth, $width, $height);
  56.        
  57.             /**
  58.             * Создаем изображение
  59.             */
  60.             switch ($ext) {
  61.                 case '.jpg':
  62.                     imagejpeg($thumb, $dir . $filename, $quality);
  63.                     break;
  64.                    
  65.                 case '.gif':
  66.                     imagegif($thumb, $dir . $filename);
  67.                     break;
  68.                    
  69.                 case '.png':
  70.                     imagepng($thumb, $dir . $filename, $quality);
  71.                     break;
  72.                    
  73.                 case '.bmp':
  74.                     imagewbmp($thumb, $dir . $filename);
  75.                     break;
  76.             }    
  77.     } else {
  78.         return false;
  79.     }
  80.    
  81.     /*
  82.     *  Очищаем оперативную память сервера от временных файлов,
  83.     *  которые потребовались для создания миниатюры
  84.     **/
  85.         @imagedestroy($thumb);        
  86.         @imagedestroy($source);  
  87.            
  88.         return $filename;
  89.     }
  90.     ?>
  91.    
3. Asheronliner - 01 Июня, 2011 - 10:19:46 - перейти к сообщению
Это весь PHP код, отвечающий за изменение фото, который я опубликовал, больше нет. Это просто для теста я написал небольшой кусочек на одной странице.
(Добавление)
vlados, спасибо! Буду разбираться с этим большим кодом Улыбка
4. vlados - 01 Июня, 2011 - 10:44:52 - перейти к сообщению
Asheronliner спасибо в карман не положишь! Радость
Первый код взял с пхпклассы.ком. Второй с какого-то сайта, не помню ко кого, он был в топе гугла. Растерялся
5. ALEN - 01 Июня, 2011 - 11:50:36 - перейти к сообщению
Asheronliner
Еще вот:
http://forum.php.su/topic.php?fo...35&topic=736

 

Powered by ExBB FM 1.0 RC1