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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изменение разрешения картинки

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
irinasolnce
Отправлено: 08 Ноября, 2009 - 21:19:37
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Использую следующую функцию для создания уменьшенной копии картинки:
PHP:
скопировать код в буфер обмена
  1.  
  2. function ResizeImage($image_from,$image_to, $fitwidth=450,$fitheight=450,$quality=75) {
  3.  global $php_inc;
  4.  $os=$originalsize=getimagesize($image_from);
  5.  // если фотка JPEG или размеры, до которых надо уменьшить - ничего не делать
  6.  if($originalsize[2]!=2 && $originalsize[2]!=3 && $originalsize[2]!=6 && ($originalsize[2]<9
  7.    or $originalsize[2]>12)) {
  8.  return false;
  9.  }
  10.  if($originalsize[0]>$fitwidth or $originalsize[1]>$fitheight) {
  11.   $h=getimagesize($image_from);
  12.  if(($h[0]/$fitwidth)>($h[1]/$fitheight))
  13.  {
  14.  $fitheight=$h[1]*$fitwidth/$h[0];
  15.  }else{
  16.  $fitwidth=$h[0]*$fitheight/$h[1];
  17.  }
  18.  if($os[2]==2 or ($os[2]>=9 && $os[2]<=12))$i = ImageCreateFromJPEG($image_from);
  19.  if($os[2]==3)$i=ImageCreateFromPng($image_from);
  20.  $o = ImageCreateTrueColor($fitwidth, $fitheight);
  21.  imagecopyresampled($o, $i, 0, 0, 0, 0, $fitwidth, $fitheight, $h[0], $h[1]);
  22.  imagejpeg($o, $image_to, $quality);
  23.  chmod($image_to,0777);
  24.  return 2;
  25.  }
  26.  if($originalsize[0]<=$fitwidth && $originalsize[1]<=$fitheight) {
  27.  $i = ImageCreateFromJPEG($image_from);
  28.  imagejpeg($i, $image_to, $quality);
  29.  chmod($image_to,0777);
  30.  return 1;
  31.  }
  32.  }
  33.  

в результате не получаю файл $image_to!
Проверяю, $image_from поступает в функцию, разрешение $image_from больше разрешения искомого файла.
PS: На другом хостинге, все работает. Огорчение

Помогите пожалуйста....
 
 Top
Djin_dj
Отправлено: 08 Ноября, 2009 - 22:06:21
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




А mime тип где, ты же должен броузеру отдать значение в header
 
 Top
Мелкий Супермодератор
Отправлено: 08 Ноября, 2009 - 22:42:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Djin_dj, зачем? Браузеру как раз ничего не выводится, ибо вывод идёт в файл.

irinasolnce, сегодня скрипт не осилил, завтра прочитаю может быть Улыбка


-----
PostgreSQL DBA
 
 Top
biperch
Отправлено: 08 Ноября, 2009 - 22:56:54
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




Только сегодня написал небольшой класс как раз в тему:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. /**
  4.  * @author biperch
  5.  * @copyright 2009
  6.  */
  7.  
  8. class img_biper {
  9.        
  10.           var $img; # загруженное изображение
  11.           var $width; # ширина
  12.           var $height; # высота
  13.           var $type_file; # gif jpg и тд
  14.          
  15.           function img_biper($i){
  16.                        
  17.                                 if (!file_exists($i)) { die ('Указаный файл не существует');}
  18.                                
  19.                                
  20.                                    
  21.                                 $size=getimagesize($i);
  22.                                 $this->width=$size[0]; #ширина
  23.                                 $this->height=$size[1];# ВЫСОТА
  24.                                                
  25.                                 switch ($size[2]){
  26.                                         case 1: $this->type_file="GIF"; $this->img=imagecreatefromgif($i); break;
  27.                                         case 2: $this->type_file="JPG"; $this->img=imagecreatefromjpeg($i); break;
  28.                                         case 3: $this->type_file="PNG"; $this->img=imagecreatefrompng($i); break;
  29.                                         case 4: $this->type_file="SWF"; die('С файлами SWF работать неумею!');
  30.                                         default: die( "Неподходящий тип файла");                                       
  31.                                 }
  32.                                
  33.                                
  34.                                
  35.           } # img_biper
  36.          
  37.           function img_write($q=100){ #Выводит изображение
  38.                
  39.                                 switch ($this->type_file){
  40.                                         case 'GIF': header("Content-type: image\gif"); imagegif($this->img); break;
  41.                                         case 'JPG': header("Content-type: image\jpeg "); imageJPEG($this->img, null, $q); break;
  42.                                         case 'PNG': header("Content-type: image\png"); imagePNG($this->img); break;                    
  43.                                 }              
  44.           } #img_write
  45.          
  46.           function img_save($f){ #Выводит изображение
  47.                
  48.                                   $filename=basename($f);
  49.                                   $ras=explode('.', $filename);
  50.                                  
  51.                                   switch ($ras[1]){
  52.                                         case 'GIF':  imagegif($this->img, $f); break;
  53.                                         case 'JPG':  imageJPEG($this->img, $f); break;
  54.                                         case 'PNG':  imagePNG($this->img, $f); break;
  55.                                         case 'JPEG':  imageJPEG($this->img, $f); break;
  56.                                         case 'gif':  imagegif($this->img, $f); break;
  57.                                         case 'jpg':  imageJPEG($this->img, $f); break;
  58.                                         case 'png':  imagePNG($this->img, $f); break;
  59.                                         case 'jpeg':  imageJPEG($this->img, $f); break;
  60.                                         default: die('неверное разширение файла');             
  61.                                   }            
  62.           } #img_save
  63.          
  64.           function img_resized($x, $y){# $y=% ресайз по процентам  $y=w ресайз по ширине $y=h ресайз по высоте
  65.                                                                    # $x- либо ширинаб либо высота, либо % маштаба
  66.                                 if($y=='w' or $y=='W'){
  67.                                         $k=$this->width/$x;
  68.                                         $new_width=$x;
  69.                                         $new_hight=floor($this->height/$k);
  70.                                 }
  71.                                
  72.                                 if($y=='h' or $y=='H'){
  73.                                         $k=$this->height/$x;
  74.                                         $new_hight=$x;
  75.                                         $new_width=floor($this->width/$k);
  76.                                 }
  77.                                
  78.                                 if($y=='%'){
  79.                                         $new_hight=floor($this->height*($x/100));
  80.                                         $new_width=floor($this->width*($x/100));                                       
  81.                                 }
  82.                                 $new_img=ImageCreateTrueColor($new_width, $new_hight);
  83.                                 //$white = imagecolorallocate ($new_img, 0, 0, 0);
  84.                                
  85.                                
  86.                                
  87.                                 imagecopyresized($new_img, $this->img, 0, 0, 0, 0, $new_width, $new_hight, $this->width, $this->height );
  88.                                
  89.                                 $this->img=$new_img;
  90.                                 $this->height=$new_hight;
  91.                                 $this->width=$new_width;
  92.                                
  93.           }#img_resized
  94.        
  95. } # class
  96.  
  97. $new_img=new img_biper("./logotipcik.jpg");
  98. $new_img->img_resized(150, '%');
  99. $new_img->img_save('./log.jpg');
  100. $new_img->img_write();
  101.  
  102. ?>


function img_resized($x, $y){# $y=% ресайз по процентам $y=w ресайз по ширине $y=h ресайз по высоте
# $x- либо ширинаб либо высота, либо % маштаба при задании ширины или высоты второй парамерт автоматом расчитует

мож кому пригодится

(Отредактировано автором: 09 Ноября, 2009 - 12:11:25)

 
 Top
irinasolnce
Отправлено: 08 Ноября, 2009 - 23:45:57
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Djin_dj пишет:
А mime тип где, ты же должен броузеру отдать значение в header

А как переделать код что бы выводить уменьшенную картинку сразу в браузер?
Я так понимаю надо делать так:

?
(Добавление)
irinasolnce пишет:
Djin_dj пишет:
А mime тип где, ты же должен броузеру отдать значение в header

А как переделать код что бы выводить уменьшенную картинку сразу в браузер?
Я так понимаю надо делать так:

?


В общем, все работает на другом хостинге, на моем не работает, уверенна что дело в хостинге.... Однако
 
 Top
Djin_dj
Отправлено: 09 Ноября, 2009 - 08:25:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Июнь 2008  
Откуда: Россия


Помог: 0 раз(а)




Короче если надо выкидываю класс, там много всяких еще дополнений но тем не менее первый файл непосредственно класс туда передаешь путь к path изображению, и max максимальную ширину то есть width он находит отношение сторон и уменьшает пропорционально, плюс можно изменить качество q и передавать налагаемые на картинку данные data
листинг класса i.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class i
  4. {
  5.         var $res_func=array(
  6.         'image/jpeg'=>'imagecreatefromjpeg',
  7.         'image/gif'=>'imagecreatefromgif',
  8.         'image/png'=>'imagecreatefrompng'
  9.         );
  10.         var $cre_func=array(
  11.         'image/jpeg'=>'imagecreatetruecolor',
  12.         'image/gif'=>'imagecreate',
  13.         'image/png'=>'imagecreatetruecolor'
  14.         );
  15.         var $ret_func=array(
  16.         'image/jpeg'=>'imagejpeg',
  17.         'image/gif'=>'imagegif',
  18.         'image/png'=>'imagepng'
  19.         );
  20.         var $p=array();
  21.         function i()
  22.         {
  23.         }
  24.         function i_info($path=null)
  25.         {
  26.                 if(function_exists('getimagesize'))
  27.                 {
  28.                         $image=getimagesize($path);
  29.                 }
  30.                 return $image;
  31.         }
  32.         function res($path=null,$max=null,$quality=null,$data=null)
  33.         {
  34.                 $path=$path;
  35.                 $max=(int)$max;
  36.                 $params=$this->i_info($path);
  37.                 $idata=file_get_contents($path);
  38.                 $im=imagecreatefromstring($idata);
  39.                 $num=$max;
  40.                 if($max>0)
  41.                 {
  42.                         if($params[0]>$params[1])
  43.                         {
  44.                                 $n=abs($params[0]/$num);
  45.                                 $new_w=$num;
  46.                                 $new_h=(int)($params[1]/$n);
  47.                         }
  48.                         if($params[1]>$params[0])
  49.                         {
  50.                                 $n=abs($params[1]/$num);
  51.                                 $new_h=$num;
  52.                                 $new_w=(int)($params[0]/$n);
  53.                         }
  54.                         if($params[1]==$params[0])
  55.                         {
  56.                                 $new_w=$num;
  57.                                 $new_h=$num;
  58.                         }
  59.                 }
  60.                 else
  61.                 {
  62.                         $new_w=$params[0];
  63.                         $new_h=$params[1];
  64.                 }
  65.                 if($new_w>=$params[0] || $new_h>=$params[1])
  66.                 {
  67.                         $new_w=$params[0];
  68.                         $new_h=$params[1];
  69.                 }
  70.                 $im2=@$this->cre_func[$params['mime']]($new_w, $new_h);
  71.                 if($params['mime']=='image/gif' || $params['mime']=='image/png')
  72.                 {
  73.                         $background = imagecolorallocate($im2, 255, 255, 255);
  74.                 }
  75.                 $GammaFloat = 1.4;
  76.                 imagecopyresized($im2,$im,0,0,0,0,$new_w,$new_h,imagesx($im),imagesy($im));
  77.                 if($params['mime']=='image/gif' || $params['mime']=='image/png')
  78.                 {
  79.                         imagecolortransparent($im2,$background);
  80.                 }
  81.                 $qua=null;
  82.                 if($params['mime']=='image/jpeg')
  83.                 {
  84.                         if($quality!==null && $quality>0)
  85.                         {
  86.                                 $qua=$quality;
  87.                         }
  88.                         else
  89.                         {
  90.                                 $qua=80;
  91.                         }
  92.                 }
  93.         /*А вот тут будет накладывать шрифт
  94.                 $data = 'www.djdish.ru';
  95.                 $white = imagecolorallocate ($im2, 255, 0, 0);
  96.                 $counttext = imagettfbbox(20,0,"font/arial.ttf",$data);
  97.                 $textw = $counttext[0]+($counttext[2]-$counttext[0]);
  98.                 $texth = ($counttext[7]-$counttext[5])+($counttext[1]-$counttext[7]);
  99.                 $imgw = $new_w;
  100.                 $imgh = $new_h;
  101.                 $cordw = ($new_w/2)-($textw/2);
  102.                 $cordh = ($new_h/2)+($texth/2);
  103.                 imagettftext ($im2, 20, 0, $cordw, $cordh, $white, "font/arial.ttf", $data);
  104.         А вот тут закончили накладывать шрифт*/
  105.                 $myimage=@$this->ret_func[$params['mime']]($im2,null,$qua);
  106.                 return $myimage;
  107.                 imagedestroy($im);
  108.                 imagedestroy($im2);
  109.         }
  110. }
  111. ?>
  112.  

скрипт который вызывает этот класс res.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. include_once(dirname(__FILE__).'/i.php');
  4. $i=new i();
  5. ini_set('memory_limit','16M');
  6. print $i->res($_SERVER['DOCUMENT_ROOT'].(string)$_GET['path'],(int)$_GET['max'],(int)$_GET['q'],(int)$_GET['data']);
  7. ?>
  8.  


ну и соответственно как в коде должно писаться некий index.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <img src='res.php?path=foto/myfoto.jpg&max=200&q=100&data=Привет'>
  3.  

Все
 
 Top
Champion Супермодератор
Отправлено: 09 Ноября, 2009 - 08:53:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




irinasolnce пишет:
в результате не получаю файл $image_to!
Наверное функция выдает какую-то ошибку?
 
 Top
JustUserR
Отправлено: 09 Ноября, 2009 - 10:36:22
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




irinasolnce А права записи то есть в папку куда вы записываете файл $image_to ? Поставиье 777 на этоу папку


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
biperch
Отправлено: 09 Ноября, 2009 - 12:10:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




@

(Отредактировано автором: 09 Ноября, 2009 - 12:13:51)

 
 Top
irinasolnce
Отправлено: 09 Ноября, 2009 - 17:01:36
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




JustUserR пишет:
А права записи то есть в папку куда вы записываете файл $image_to ? Поставиье 777 на этоу папку


Не помогает Хм
 
 Top
JustUserR
Отправлено: 09 Ноября, 2009 - 17:22:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




irinasolnce
Champion пишет:
irinasolnce пишет:
в результате не получаю файл $image_to!Наверное функция выдает какую-то ошибку?
Всетаки чтобы вам помочь нужно больше подробностей


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
irinasolnce
Отправлено: 09 Ноября, 2009 - 19:17:00
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Сент. 2009  


Помог: 0 раз(а)




Djin_dj пишет:
Короче если надо выкидываю класс, там много всяких еще дополнений но тем не менее первый файл непосредственно класс туда передаешь путь к path изображению, и max максимальную ширину то есть width он находит отношение сторон и уменьшает пропорционально, плюс можно изменить качество q и передавать налагаемые на картинку данные data


Очень интересно Хорошо
Попыталась сделать, но что то не работает.
создала три файла с теми же название что и у вас, единственное что include_once(dirname(__FILE__).'/i.php'); заменила на include_once('i.php'); так как i.php и res.php в папке хостинга находяться в одной папке.
Но что то index.php картиночку не выводит.
(Добавление)
Champion пишет:
Наверное функция выдает какую-то ошибку?

Никаких ошибок.
(Добавление)
JustUserR пишет:
Всетаки чтобы вам помочь нужно больше подробностей

Ну но одном хостинге работает на втором нет, очевидно же что проблема в хостинге, или нет?
 
 Top
biperch
Отправлено: 10 Ноября, 2009 - 00:45:59
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 588
Дата рег-ции: Окт. 2009  
Откуда: Днепропетровск


Помог: 8 раз(а)




irinasolnce пишет:
Ну но одном хостинге работает на втором нет, очевидно же что проблема в хостинге, или нет?

смотря как переносили скрипты, человечиский фактор
 
 Top
JustUserR
Отправлено: 10 Ноября, 2009 - 08:15:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




irinasolnce Может настройки на хостингах разные или библиотек не хватает - на самом деле много факторов


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 10 Ноября, 2009 - 09:50:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




irinasolnce пишет:
Никаких ошибок.
error_reporting(E_ALL); ini_set('display_errors', true); сделай в начале скрипта чтоб показывались ошибки
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB