URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5944
[ Назад ]

Исходное сообщение
"Ресайт изображения"

Отправлено LSDParanoia , 20-Авг-08 12:32 
Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту пропорционально ширине?

Содержание

Сообщения в этом обсуждении
"Ресайт изображения"
Отправлено GD , 20-Авг-08 14:22 
>Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту
>пропорционально ширине?

фотошопом?


"Ресайт изображения"
Отправлено LSDParanoia , 20-Авг-08 14:26 
>>Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту
>>пропорционально ширине?
>
>фотошопом?

Вопрос то в разделе PHP ;)

Мне не функции нужны, а расчет соотношения размера. Тобишь если в ширину больше 800 - то ресайзим на 800 в ширину и в соотношении с этим так же в высоту(картинка может быть квадратная).

То же самое с высотой, если она больше чем надо.


"Ресайт изображения"
Отправлено GD , 20-Авг-08 15:07 
>[оверквотинг удален]
>>
>>фотошопом?
>
>Вопрос то в разделе PHP ;)
>
>Мне не функции нужны, а расчет соотношения размера. Тобишь если в ширину
>больше 800 - то ресайзим на 800 в ширину и в
>соотношении с этим так же в высоту(картинка может быть квадратная).
>
>То же самое с высотой, если она больше чем надо.

ага, т.е. вы хотите узнать как считаются пропорции?


"Ресайт изображения"
Отправлено LSDParanoia , 20-Авг-08 15:45 
>ага, т.е. вы хотите узнать как считаются пропорции?

Да. Только что просчитал:

$width=$size[0];
$height=$size[1];

$х = 800 / размер изображения ширина;
$у = 600 / размер изображения высота;

потом умножаем на эти числа высоту и ширину - и вуаля, прально?


"Ресайт изображения"
Отправлено angra , 22-Авг-08 15:46 
>$х = 800 / размер изображения ширина;
>$у = 600 / размер изображения высота;
>
>потом умножаем на эти числа высоту и ширину - и вуаля, прально?

И получаем всегда 800x600 с возможным уродованием картинки. Зачем что-то считать в таком случае мне не понятно.

Если стоит задача вписать в 800х600 картинку сохранив соотношение сторон, то считаем так
h,w - исходная высота и ширина
r=h/w
h_new=(r < 0.75)? 800*r : 600
w_new=(r < 0.75)? 800 : 600/r



"Ресайт изображения"
Отправлено LSDParanoia , 22-Авг-08 17:59 
>[оверквотинг удален]
>
>И получаем всегда 800x600 с возможным уродованием картинки. Зачем что-то считать в
>таком случае мне не понятно.
>
>Если стоит задача вписать в 800х600 картинку сохранив соотношение сторон, то считаем
>так
>h,w - исходная высота и ширина
>r=h/w
>h_new=(r < 0.75)? 800*r : 600
>w_new=(r < 0.75)? 800 : 600/r

Ресайзит картинки пропорционально О_о \|/


$time=time();
        $mtime=str_replace(" ",'',microtime());
        $filename="../temp/$time.$mtime.tmp";
        move_uploaded_file($_FILES['picture']['tmp_name'],$filename)or die('Невозможно скопировать файл');
        if(eregi(".jpg$|.jpeg$",$_FILES['picture']['name'])){
            $cop = imagecreatefromJpeg($filename);
            $thumb = imagecreatefromJpeg($filename);
        }elseif(eregi(".png$",$_FILES['picture']['name'])){
            $cop = imagecreatefrompng($filename);
            $thumb = imagecreatefromJpeg($filename);
        }elseif(eregi(".gif$",$_FILES['picture']['name'])){
            $cop = imagecreatefromgif($filename);
            $thumb = imagecreatefromJpeg($filename);
        }else{
            die("Неправильный формат картинки");
            @chmod($filaneme,0777);
            @unlink($filename);
        }
        function rs($sz_x,$sz_y,$fln,$fl,$pt,$nm,$link,$sz){ //Ширина, высота, файл, файл2, путь, имя
            $size=getimagesize($fln);
            $x_ratio=$sz_x / $size[0];
            $y_ratio=$sz_y / $size[1];
            if(($size[0]<=$sz_x)&&($size[1]<=$sz_y)){
                $tn_width=$size[0];
                $tn_height=$size[1];
            }elseif(($x_ratio * $size[1])<$sz_x){
                $tn_height=$x_ratio * $size[1];
                $tn_width=$sz_x;
            }else{
                $tn_width=$y_ratio * $size[0];
                $tn_height=$sz_y;
            }
            $time=time();
            $mtime=str_replace(" ",'',microtime());
            $trumb=imagecreatetruecolor($tn_width,$tn_height);
            $image=imagecopyresized($trumb,$fl,0,0,0,0,$tn_width,$tn_height,$size[0],$size[1]);
            ImageJpeg($trumb,$pt.$nm,-1);
            ImageDestroy($trumb);
            ImageDestroy($fl);
            mysql_query("insert into photos values('', '".($pt.$nm)."', '".$_POST['photo_name']."', '".$_POST['photo_descr']."', '".$_POST['alb_add']."', '".$sz."')", $link);
        }
        $name=$time.$mtime;
        rs(800,600,$filename,$cop,"../images/photo/",$name."_big.jpg",$link,1);
        rs(75,56,$filename,$thumb,"../images/photo/",$name."_small.jpg",$link,2);
        @chmod($filename,0777);
        @unlink($filename);


"Ресайт изображения"
Отправлено angra , 22-Авг-08 18:54 
Мдаа, не подскажете урл сайтика, который вы разрабатываете?

"Ресайт изображения"
Отправлено LSDParanoia , 25-Авг-08 10:00 
>Мдаа, не подскажете урл сайтика, который вы разрабатываете?

В чем дело? Всё работает на ура. Мог бы конечно в пару строк вложиться, если бы юзал ImageMagic, но нужно именно на гд.

А сайта пока в интернете нет.


"Ресайт изображения"
Отправлено BsDr , 28-Авг-08 17:07 
>Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту
>пропорционально ширине?

resizeImage ($src, $dest, $newHeight, 800)

function resizeImage ($src, $dest, $newHeight, $newWidth)
  {
    /*if ( $dest )
    {
      fopen($dest, "w") ||
        die("Can not write to $dest.  Check directory permissions!");
    }*/
    $imgInfo = getimagesize($src);
    $width = $imgInfo[0]; $height = $imgInfo[1];
    $file_type = $imgInfo[2];
    if($width <= $newWidth)
        {
            $newWidth = 0;
        }
    else
        {
            $newHeight = ($newWidth*$height)/ $width;
        }
    if ( $newHeight || $newWidth )
    {
      if ( $newHeight && $newWidth )
      {
        $width = $newWidth;
        $height = $newHeight;
      } else {
        if ( $newWidth == "0" )
        {
          $ratio = (intval(($width / $newWidth) * 100)) / 100;  
          $width = (intval(($width / $ratio) * 100)) / 100;
          $height = (intval(($height / $ratio) * 100)) / 100;
        } else {
          $ratio = (intval(($width / $newHeight) * 100)) / 100;
          $width = (intval(($width / $ratio) * 100)) / 100;
          $height = (intval(($height / $ratio) * 100)) / 100;
        }
      }
    }
    $destimg=ImageCreateTrueColor($width,$height);
    switch ($file_type)
    {
      case 1:
        $srcimg = imagecreatefromgif($src);
        if (function_exists(ImageGIF))
        {
          $imgType = "gif";
        } else {
          $imgType = "jpeg";
        }
        break;
      case 2:
        $srcimg = imagecreatefromjpeg($src);
        $imgType = "jpeg";  
        break;
      case 3:
        $srcimg = imagecreatefrompng($src);
        $imgType = "png";
        break;
      default:
        break;
    }
    ImageCopyResized($destimg,$srcimg,0,0,0,0,$width,$height,ImageSX($srcimg),ImageSY($srcimg));
    if ( !$dest ) { header ("Content-type: image/$imgType"); }
    switch ($file_type)
    {
      case 1:
        if (function_exists(ImageGIF))
        {
          if ( $dest) { imagegif ($destimg, $dest); } else { imagegif($destimg); }
        } else {
          if ( $dest) { imagejpeg ($destimg, $dest); } else { imagejpeg($destimg); }
        }
        break;
      case 2:
        if ( $dest) { imagejpeg ($destimg, $dest); } else { imagejpeg($destimg); }
        break;
      case 3:
        if ( $dest) { imagepng ($destimg, $dest); } else { imagepng($destimg); }
        break;
      default:
        break;
    }
    imagedestroy ($srcimg);
    imagedestroy ($destimg);
  }


"Ресайт изображения"
Отправлено angra , 28-Авг-08 18:20 
Это топик с примерами как НЕ надо программировать?

"Ресайт изображения"
Отправлено BsDr , 28-Авг-08 22:39 
>Это топик с примерами как НЕ надо программировать?

Этот пример я где-то нашел(не помню где)и использую его, функция работает. А что до того ка надо, как не надо так всех индусов давайте теперь хаить.

Я предложил решение вопроса, только и всего.


"Ресайт изображения"
Отправлено phantom_a666 , 28-Авг-08 18:53 
Чтобы размеры должны быть не более 800*600 делай:
если (высота * 3 > ширина * 4) тогда { коэф_масшт=600 / высота}
  инача { коэф_масшт=800 / ширина}
новая_ширина = ширина * коэф_масшт
новая_высота = высота * коэф_масшт