Автоматическое уменьшение картинки

Тема в разделе "PHP", создана пользователем taboo, 21 мар 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. taboo

    taboo Создатель

    Регистр.:
    18 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    Вот допустим я меня резоляция экрана 800х600
    и я запостил новость на сайте с движком DLE,
    Внутри новоти условно находится картинка с рзвером
    2000х2000, как мне сделать так чтоб -
    Если картинка в новости превышает ширину в 450 пикс
    то она автоманом будет уменьшена подходящий по ширине в 450 пикс.
    Также могу подчеркнуть что пользуюсь Rss grabber'om
    Так что возможно добавить туда функцию при получении ссылки.
     
  2. sw04

    sw04 seoplayer

    Регистр.:
    1 дек 2007
    Сообщения:
    601
    Симпатии:
    193
  3. taboo

    taboo Создатель

    Регистр.:
    18 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    А что как и куда???
    Я новенький, знаю только html
     
  4. sw04

    sw04 seoplayer

    Регистр.:
    1 дек 2007
    Сообщения:
    601
    Симпатии:
    193
    ууу...далеко не уйдешь. одним глазом учи пока php вторым смотри, тебе в код надо вставить проверку

    PHP:
    /*
    $imgName - файл рисунок
    */
    list($width$height) = getimagesize($imgName);

    if(
    $width>450)
    {
    /*тут выводишь рисунок, но в хтмл вставляешь, но искусственно задаешь меньшие значения width и height, чтоб картинка не съехала*/
    }else{
    /*выводишь картинку без ресайза*/
    }
     
  5. taboo

    taboo Создатель

    Регистр.:
    18 мар 2008
    Сообщения:
    14
    Симпатии:
    0
    А куда мне это вставить то?
     
  6. sw04

    sw04 seoplayer

    Регистр.:
    1 дек 2007
    Сообщения:
    601
    Симпатии:
    193
    разберемся в личке, а то так полный курс надо проходить -)
    за набор постов можно посчитать.
     
  7. chewie

    chewie Создатель

    Регистр.:
    17 ноя 2007
    Сообщения:
    41
    Симпатии:
    1
    Сделай ресайзер, как вариант возьми готовый где-нибудь здесь:

    phpclasses.org
    или выдери из исходников известных фреймворков.

    Да, тебе нужна поддержка GD в пхп.
     
  8. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Добав в css стиль для img и поставь ширину 450 пкс. Есть еще в css параметр max-width только он не работает в ИЕ
     
  9. lashka1

    lashka1 Постоялец

    Регистр.:
    31 авг 2007
    Сообщения:
    62
    Симпатии:
    5
    у меня виводитса так
    PHP:
    <?=$myrow["gallery3"]?>
    и как мне уменшит до 80x60 pixel
     
  10. Black#FFFFFF

    Black#FFFFFF

    Регистр.:
    19 июл 2007
    Сообщения:
    176
    Симпатии:
    103
    ммм. вот тебе пример класса для уменьшения картинок по большей стороне:

    PHP:
    class ImageClass{

        var 
    $name="";
        var 
    $ext="";
        var 
    $i_ext=array(
        
    "jpeg"=>"JPEG",
        
    "jpg"=>"JPEG",
        
    "png"=>"PNG",
        
    "gif"=>"GIF"
        
    );
        var 
    $width="";
        var 
    $height="";
        var 
    $path="";
        function 
    ImageClass($width$height$image$where='') {

            
    $source "";

        if(
    strpos($image,$_SERVER['DOCUMENT_ROOT'])===false)
                
    $image=$_SERVER['DOCUMENT_ROOT'].'/'.$image;
            if(!
    is_file($image))
                return 
    false;

            
    $ext_pos=strrpos($image,".");
            
    $folder_pos=strrpos($image,"/");



            
    $this->name=substr($image,$folder_pos+1,$ext_pos);
            
    $this->ext=strtolower(substr($image,$ext_pos+1));
            
    $_ext=$this->ext;
            if(!
    array_key_exists($this->ext,$this->i_ext)){
            return 
    false;
            } else {
             
    $this->i_ext array_flip($this->i_ext);
             
    $func_ext=array_search($this->ext,$this->i_ext);
             
    $func="ImageCreateFrom".$func_ext;
             
    $source = @$func($image);

             if(
    is_resource($source)===false)
                foreach(
    $this->i_ext as $k=>$v)
                    {
                    
    $func="ImageCreateFrom".$k;
                    
    $source = @$func($image);
                    if(
    is_resource($source)===true)
                    {
                    
    $this->ext=$v;
                    
    $func_ext=$k;
                    break;
                    }
                    }

            
    $size[0] = ImageSX($source);
            
    $size[1] = ImageSY($source);

            
    $this->width  $size[0];
            
    $this->height $size[1];


            
    $ft $this->ext;
            
    $quality 75/*качество полученной картинки от 0 до 100, можно вынести в параметры конструктора класса*/
            
    $size GetImageSize($image);
            if(
    $source != ""){
            if(!(
    $size[0]>$width)&&!($size[1]>$height))
                return 
    false;
            
    $this->sourceResize($source,$width,$height);

            
    $func="Image".$func_ext;

            if(
    $_ext!=$this->ext)
            
    $image=str_replace(".".$_ext,".".$this->ext,$image);

            if(!empty(
    $where)&&!empty($this->name)&&!empty($this->ext)){
        if(
    strpos($where,$_SERVER['DOCUMENT_ROOT'])!==false)
                
    $where str_replace($_SERVER['DOCUMENT_ROOT'],'',$where);
            if(
    strpos($where,$_SERVER['HTTP_HOST'])===false)
                    
    $where='http://'.$_SERVER['HTTP_HOST'].'/'.$where;
                            
    //$where='https://'.$_SERVER['HTTP_HOST'].'/'.$where;
                    
    $image $where.'/'.$this->name.'.'.$this->ext;
            }
            @
    $func($source,  $image);

            @
    ImageDestroy($source);
        
            if(
    strpos($image,$_SERVER['DOCUMENT_ROOT'])!==false)
                
    $image=str_replace($_SERVER['DOCUMENT_ROOT'],'',$image);
            if(
    strpos($image,$_SERVER['HTTP_HOST'])===false)
                    
    $image='http://'.$_SERVER['HTTP_HOST'].'/'.$image;
                            
    //$image='https://'.$_SERVER['HTTP_HOST'].'/'.$image;
                   

            
    $this->path $image;
            }
        }

      }
      function 
    sourceResize$source$width$height )
      {

            
    $swidth $width;
            
    $sheight $height;

            
    $size[0] = ImageSX($source);
            
    $size[1] = ImageSY($source);


            if(
    is_array($size)&&!empty($size[0])&&!empty($size[1])){

                if(
    $size[1]>$height){
                    
    $height $height;
                    
    $width  round(($height/$size[1]) * $size[0]);
                    
    $size[1] = $height;
                    
    $size[0] = $width;
                }

                if(
    $size[0]>$swidth){
                    
    $width  $swidth;
                    
    $height round(($swidth/$size[0]) * $size[1]);
                }
            }

            
    $thumb ImageCreateTrueColor($width$height);

            
    $this->width  $width;
            
    $this->height $height;

            
    ImageCopyResampled($thumb$source0000$width$heightImageSX($source), ImageSY($source));

            return 
    $thumb;
      }
      function 
    getWidth()
      {
         return (!empty(
    $this->width)) ? $this->width 0;
      }
      function 
    getHeight()
      {
         return (!empty(
    $this->height)) ? $this->height 0;
      }
      function 
    getPath()
      {
         return (!empty(
    $this->path)) ? $this->path 0;
     
      }
    }
    $image 'путь к картинке на сервере';
    $obj = new ImageClass(500,400,$image,'thumbs')
    $width $obj->getWidth();
    $height $obj->getHeight();
    $path $obj->getPath();
    echo (
    '<img src="'.$path.'" width = "'.$width.'"' height="'.$height.'" />');
    unset($obj, $image, $width, $height, $path);
    Реально работающий класс задачей которого является:
    а) уменьшение кратинок по длинне ширине - и складывание их "мелких копий" на сервере.
    б) получение после уменьшения высоты и длинны вновь созданной картинки (чтобы указать в атрибутах тэга img при отдаче картинки браузеру
    в) "складывание" уменьшенных картинок в указанную папку
    Класс требует таких параметров:
    длинна картинки,высота картинки, путь к картинке на сервере
    (путь должен быть указан абсолютно, пример: /var/www/my_site/images/test.jpg), опционально - последний параметр - путь, куда складывать уменьшенный рисунок, задается без / на конце, так же предпочтительнее указывать абсолютный путь. При этом - если параметр не задан: картинка сохраняется под тем же именем в той же папке.
    Работает с типами .gif, .png, .jpeg,.jpg - если картинка является другим типом файла с переименованным расширением - класс попытается "подобрать" правильный тип файла и сохранить картинку уже с верным расширением.
    Методы класса:
    getPath() - возвращает абсолютный путь к файлу картинки

    Комментарии:
    PHP:
            if(strpos($image,$_SERVER['DOCUMENT_ROOT'])!==false)
                
    $image=str_replace($_SERVER['DOCUMENT_ROOT'],'',$image);
            if(
    strpos($image,$_SERVER['HTTP_HOST'])===false)
                    
    $image='http://'.$_SERVER['HTTP_HOST'].'/'.$image;
                            
    //$image='https://'.$_SERVER['HTTP_HOST'].'/'.$image;

    после обработки изображения мы проверяем путь, где хранится наша преобразованная картинка на наличие абсолютного пути к папке, если он есть то удаляем его, и проверяем путь на указание адреса сайта - если его нет - то добавляем его.

    getHeight() - возвращает высоту картинки после ресайза
    getWidth() - возвращает ширину картинки после ресайза
    Указан пример использования - задание пути высоты и длинны картинки в тэге img после ресайза

    Класс рабочий. Единственное "с коленки" дописана часть функции складывания ресайза картинок в другие папки и попытки получения пути к картинке для использования в параметре src тэга img - но там ошибку было бы сложно допустить.

    Что интересного еще можно для себя будет сделать с этим примером:
    - выдача предупреждений в спорных ситуациях
    - контроль уникальности имен файлов в папке при ресайзе картинок
    - работа с относительными путями

    Пользуйтесь.)

    Требования: библиотека GD.

    Внимание! Класс работает только с абсолютными путями к файлам, находящимся уже на Вашем сервере. С файлами с других севреров, или относительными путями работать не будет.
     
    KillerHT, Кристя и baddan нравится это.
Статус темы:
Закрыта.