Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту пропорционально ширине?
>Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту
>пропорционально ширине?фотошопом?
>>Народ, как ресайзануть из любого размера имаг в ширину 800, и высоту
>>пропорционально ширине?
>
>фотошопом?Вопрос то в разделе PHP ;)
Мне не функции нужны, а расчет соотношения размера. Тобишь если в ширину больше 800 - то ресайзим на 800 в ширину и в соотношении с этим так же в высоту(картинка может быть квадратная).
То же самое с высотой, если она больше чем надо.
>[оверквотинг удален]
>>
>>фотошопом?
>
>Вопрос то в разделе PHP ;)
>
>Мне не функции нужны, а расчет соотношения размера. Тобишь если в ширину
>больше 800 - то ресайзим на 800 в ширину и в
>соотношении с этим так же в высоту(картинка может быть квадратная).
>
>То же самое с высотой, если она больше чем надо.ага, т.е. вы хотите узнать как считаются пропорции?
>ага, т.е. вы хотите узнать как считаются пропорции?Да. Только что просчитал:
$width=$size[0];
$height=$size[1];$х = 800 / размер изображения ширина;
$у = 600 / размер изображения высота;потом умножаем на эти числа высоту и ширину - и вуаля, прально?
>$х = 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
>[оверквотинг удален]
>
>И получаем всегда 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);
Мдаа, не подскажете урл сайтика, который вы разрабатываете?
>Мдаа, не подскажете урл сайтика, который вы разрабатываете?В чем дело? Всё работает на ура. Мог бы конечно в пару строк вложиться, если бы юзал ImageMagic, но нужно именно на гд.
А сайта пока в интернете нет.
>Народ, как ресайзануть из любого размера имаг в ширину 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);
}
Это топик с примерами как НЕ надо программировать?
>Это топик с примерами как НЕ надо программировать?Этот пример я где-то нашел(не помню где)и использую его, функция работает. А что до того ка надо, как не надо так всех индусов давайте теперь хаить.
Я предложил решение вопроса, только и всего.
Чтобы размеры должны быть не более 800*600 делай:
если (высота * 3 > ширина * 4) тогда { коэф_масшт=600 / высота}
инача { коэф_масшт=800 / ширина}
новая_ширина = ширина * коэф_масшт
новая_высота = высота * коэф_масшт