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

Статус
В этой теме нельзя размещать новые ответы.

taboo

Создатель
Регистрация
18 Мар 2008
Сообщения
14
Реакции
0
Вот допустим я меня резоляция экрана 800х600
и я запостил новость на сайте с движком DLE,
Внутри новоти условно находится картинка с рзвером
2000х2000, как мне сделать так чтоб -
Если картинка в новости превышает ширину в 450 пикс
то она автоманом будет уменьшена подходящий по ширине в 450 пикс.
Также могу подчеркнуть что пользуюсь Rss grabber'om
Так что возможно добавить туда функцию при получении ссылки.
 
А что как и куда???
Я новенький, знаю только html
 
А куда мне это вставить то?
/*
$imgName - файл рисунок *Какой ещё файл рисунок??
откуда брать и как тут вставить?
Вообще не понять кк это сделать...
Сорри но что есть то есть, не знаю я php
Так что если можно от а до я

*/
list($width, $height) = getimagesize($imgName);

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


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

Да, тебе нужна поддержка GD в пхп.
 
Добав в css стиль для img и поставь ширину 450 пкс. Есть еще в css параметр max-width только он не работает в ИЕ
 
у меня виводитса так
PHP:
<?=$myrow["gallery3"]?>
и как мне уменшит до 80x60 pixel
 
ммм. вот тебе пример класса для уменьшения картинок по большей стороне:

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, $source, 0, 0, 0, 0, $width, $height, ImageSX($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.

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