[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция изменения разрешение изображения
Ramzil_Nixon
Есть такая функция:

function resize_image($image,$width,$height)
{
$temp=imagecreate($width, $height);
$new_image = ImageCreateFromJpeg($image);
$imagedata = getimagesize($image);
imagecopyresampled($temp, $new_image, 0, 0, 0, 0, $width, $height, $imagedata[0], $imagedata[1]);
imagejpeg($temp, $image,100); //== число 100 указывает на процент качества изображения
}


Вызываю его следующим образом:

resize_image("../images/upload.jpg",100,100);


И в как мне сохранить результать?



Спустя 8 минут, 9 секунд (21.12.2011 - 17:32) m4a1fox написал(а):
отправляй заголовком

Спустя 14 минут, 40 секунд (21.12.2011 - 17:47) Ramzil_Nixon написал(а):
Не понимаю, вот это же должен создать по моему:

$temp=imagecreate($width, $height); 


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

Спустя 3 минуты, 46 секунд (21.12.2011 - 17:51) Ramzil_Nixon написал(а):
А хотя нет. Работает biggrin.gif

Спустя 13 минут, 39 секунд (21.12.2011 - 18:04) Ramzil_Nixon написал(а):
user posted image

Почему в таком качестве выходит?

Хотя и указано 100

imagejpeg($temp, $image,100); 

Спустя 38 минут, 35 секунд (21.12.2011 - 18:43) Xes написал(а):
Какойто добрый человек сделал, я скачал в интернете...

Свернутый текст

<?
/*
############################################################
IMG_RESIZE - GD webi.ru
Для работы требуется библиотека GD

Функции для пропорционального изменения размера рисунков.
Данная функция обрабатывает JPG, GIF, PNG и BMP, на выходе всегда получается JPG.
Отличительная особенность этой библиотечки является в том, что она умеет обрабатывать картинки формата BMP.
На момент созднания этой функции GD не умела работать с рисунками BMP, не путайте пожалуйста с WBMP.

Кто является создателем функции обработки BMP выяснить не удалось.
К остальным частям функции приложили свои руки многие программисты, в том числе и я (webi.ru), улучшил и упростил использование.
Пример использования :

include("img_resize.php");
img_resize("1.jpg", "2.jpg", 150, 200, 70, 0xFFFFF0, 0);

// открывает картинку 1.jpg и сохраняет ее с новыми размерами в 2.jpg
// 150, 200 ширина и высота новой картинки
// 70 качество нового изображения в процентах
// 0xFFFFF0 цвет фона(если рисунок полуится меньше)
// 0 включить/выключить создание размера изображения, строго по размерам, Если включить, тогда размер изображения всегда будет
таким, как заявлен, а лишнее будет заполняться фоном. Экспериментируйте.


############################################################
*/



function imagebmp($img,$file="",$RLE=0)
{
$ColorCount=imagecolorstotal($img);
$Transparent=imagecolortransparent($img);
$IsTransparent=$Transparent!=-1;
if($IsTransparent) $ColorCount--;
if($ColorCount==0) {$ColorCount=0; $BitCount=24;};
if(($ColorCount>0)and($ColorCount<=2)) {$ColorCount=2; $BitCount=1;};
if(($ColorCount>2)and($ColorCount<=16)) { $ColorCount=16; $BitCount=4;};
if(($ColorCount>16)and($ColorCount<=256)) { $ColorCount=0; $BitCount=8;};
$Width=imagesx($img);
$Height=imagesy($img);
$Zbytek=(4-($Width/(8/$BitCount))%4)%4;
if($BitCount<24) $palsize=pow(2,$BitCount)*4;
$size=(floor($Width/(8/$BitCount))+$Zbytek)*$Height+54;
$size+=$palsize;
$offset=54+$palsize;
$ret = 'BM';
$ret .= int_to_dword($size);
$ret .= int_to_dword(0);
$ret .= int_to_dword($offset);
$ret .= int_to_dword(40);
$ret .= int_to_dword($Width);
$ret .= int_to_dword($Height);
$ret .= int_to_word(1);
$ret .= int_to_word($BitCount);
$ret .= int_to_dword($RLE);
$ret .= int_to_dword(0);
$ret .= int_to_dword(0);
$ret .= int_to_dword(0);
$ret .= int_to_dword(0);
$ret .= int_to_dword(0);
$CC=$ColorCount;
$sl1=strlen($ret);
if($CC==0) $CC=256;
if($BitCount<24)
{
$ColorTotal=imagecolorstotal($img);
if($IsTransparent) $ColorTotal--;
for($p=0;$p<$ColorTotal;$p++)
{
$color=imagecolorsforindex($img,$p);
$ret.=inttobyte($color["blue"]);
$ret.=inttobyte($color["green"]);
$ret.=inttobyte($color["red"]);
$ret.=inttobyte(0);
};
$CT=$ColorTotal;
for($p=$ColorTotal;$p<$CC;$p++)
{
$ret.=inttobyte(0);
$ret.=inttobyte(0);
$ret.=inttobyte(0);
$ret.=inttobyte(0);
};
};
if($BitCount<=8)
{
for($y=$Height-1;$y>=0;$y--)
{
$bWrite="";
for($x=0;$x<$Width;$x++)
{
$color=imagecolorat($img,$x,$y);
$bWrite.=decbinx($color,$BitCount);
if(strlen($bWrite)==8)
{
$retd.=inttobyte(bindec($bWrite));
$bWrite="";
};
};
if((strlen($bWrite)<8)and(strlen($bWrite)!=0))
{
$sl=strlen($bWrite);
for($t=0;$t<8-$sl;$t++)
$sl.="0";
$retd.=inttobyte(bindec($bWrite));
};
for($z=0;$z<$Zbytek;$z++)
$retd.=inttobyte(0);
};
};
if(($RLE==1)and($BitCount==8))
{
for($t=0;$t<strlen($retd);$t+=4)
{
if($t!=0)
if(($t)%$Width==0)
$ret.=chr(0).chr(0);

if(($t+5)%$Width==0)
{
$ret.=chr(0).chr(5).substr($retd,$t,5).chr(0);
$t+=1;
}
if(($t+6)%$Width==0)
{
$ret.=chr(0).chr(6).substr($retd,$t,6);
$t+=2;
}
else
{
$ret.=chr(0).chr(4).substr($retd,$t,4);
};
};
$ret.=chr(0).chr(1);
}
else
{
$ret.=$retd;
};
if($BitCount==24)
{
for($z=0;$z<$Zbytek;$z++)
$Dopl.=chr(0);

for($y=$Height-1;$y>=0;$y--)
{
for($x=0;$x<$Width;$x++)
{
$color=imagecolorsforindex($img,ImageColorAt($img,$x,$y));
$ret.=chr($color["blue"]).chr($color["green"]).chr($color["red"]);
}
$ret.=$Dopl;
};

};
if($file!="")
{
$r=($f=fopen($file,"w"));
$r=$r and fwrite($f,$ret);
$r=$r and fclose($f);
return $r;
}
else
{
echo $ret;
};
};
function imagecreatefrombmp($file)
{
global $CurrentBit, $echoMode;

$f=fopen($file,"r");
$Header=fread($f,2);

if($Header=="BM")
{
$Size=freaddword($f);
$Reserved1=freadword($f);
$Reserved2=freadword($f);
$FirstByteOfImage=freaddword($f);

$SizeBITMAPINFOHEADER=freaddword($f);
$Width=freaddword($f);
$Height=freaddword($f);
$biPlanes=freadword($f);
$biBitCount=freadword($f);
$RLECompression=freaddword($f);
$WidthxHeight=freaddword($f);
$biXPelsPerMeter=freaddword($f);
$biYPelsPerMeter=freaddword($f);
$NumberOfPalettesUsed=freaddword($f);
$NumberOfImportantColors=freaddword($f);

if($biBitCount<24)
{
$img=imagecreate($Width,$Height);
$Colors=pow(2,$biBitCount);
for($p=0;$p<$Colors;$p++)
{
$B=freadbyte($f);
$G=freadbyte($f);
$R=freadbyte($f);
$Reserved=freadbyte($f);
$Palette[]=imagecolorallocate($img,$R,$G,$B);
};
if($RLECompression==0)
{
$Zbytek=(4-ceil(($Width/(8/$biBitCount)))%4)%4;

for($y=$Height-1;$y>=0;$y--)
{
$CurrentBit=0;
for($x=0;$x<$Width;$x++)
{
$C=freadbits($f,$biBitCount);
imagesetpixel($img,$x,$y,$Palette[$C]);
};
if($CurrentBit!=0) {freadbyte($f);};
for($g=0;$g<$Zbytek;$g++)
freadbyte($f);
};

};
};


if($RLECompression==1)
{
$y=$Height;

$pocetb=0;

while(true)
{
$y--;
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;

$echoit=false;

if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>";
if(($prefix==0)and($suffix==1)) break;
if(feof($f)) break;

while(!(($prefix==0)and($suffix==0)))
{
if($prefix==0)
{
$pocet=$suffix;
$Data.=fread($f,$pocet);
$pocetb+=$pocet;
if($pocetb%2==1) {freadbyte($f); $pocetb++;};
};
if($prefix>0)
{
$pocet=$prefix;
for($r=0;$r<$pocet;$r++)
$Data.=chr($suffix);
};
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;
if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>";
};

for($x=0;$x<strlen($Data);$x++)
{
imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]);
};
$Data="";

};

};


if($RLECompression==2)
{
$y=$Height;
$pocetb=0;


while(true)
{

$y--;
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;

$echoit=false;

if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>";
if(($prefix==0)and($suffix==1)) break;
if(feof($f)) break;

while(!(($prefix==0)and($suffix==0)))
{
if($prefix==0)
{
$pocet=$suffix;

$CurrentBit=0;
for($h=0;$h<$pocet;$h++)
$Data.=chr(freadbits($f,4));
if($CurrentBit!=0) freadbits($f,4);
$pocetb+=ceil(($pocet/2));
if($pocetb%2==1) {freadbyte($f); $pocetb++;};
};
if($prefix>0)
{
$pocet=$prefix;
$i=0;
for($r=0;$r<$pocet;$r++)
{
if($i%2==0)
{
$Data.=chr($suffix%16);
}
else
{
$Data.=chr(floor($suffix/16));
};
$i++;
};
};
$prefix=freadbyte($f);
$suffix=freadbyte($f);
$pocetb+=2;
if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>";
};

for($x=0;$x<strlen($Data);$x++)
{
imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]);
};
$Data="";

};

};


if($biBitCount==24)
{
$img=imagecreatetruecolor($Width,$Height);
$Zbytek=$Width%4;

for($y=$Height-1;$y>=0;$y--)
{
for($x=0;$x<$Width;$x++)
{
$B=freadbyte($f);
$G=freadbyte($f);
$R=freadbyte($f);
$color=imagecolorexact($img,$R,$G,$B);
if($color==-1) $color=imagecolorallocate($img,$R,$G,$B);
imagesetpixel($img,$x,$y,$color);
}
for($z=0;$z<$Zbytek;$z++)
freadbyte($f);
};
};
return $img;

};


fclose($f);


};

function freadbyte($f)
{
return ord(fread($f,1));
};

function freadword($f)
{
$b1=freadbyte($f);
$b2=freadbyte($f);
return $b2*256+$b1;
};


function freadlngint($f)
{
return freaddword($f);
};

function freaddword($f)
{
$b1=freadword($f);
$b2=freadword($f);
return $b2*65536+$b1;
};



function RetBits($byte,$start,$len)
{
$bin=decbin8($byte);
$r=bindec(substr($bin,$start,$len));
return $r;

};

$CurrentBit=0;
function freadbits($f,$count)
{
global $CurrentBit,$SMode;
$Byte=freadbyte($f);
$LastCBit=$CurrentBit;
$CurrentBit+=$count;
if($CurrentBit==8)
{
$CurrentBit=0;
}
else
{
fseek($f,ftell($f)-1);
};
return RetBits($Byte,$LastCBit,$count);
};



function RGBToHex($Red,$Green,$Blue)
{
$hRed=dechex($Red);if(strlen($hRed)==1) $hRed="0$hRed";
$hGreen=dechex($Green);if(strlen($hGreen)==1) $hGreen="0$hGreen";
$hBlue=dechex($Blue);if(strlen($hBlue)==1) $hBlue="0$hBlue";
return($hRed.$hGreen.$hBlue);
};

function int_to_dword($n)
{
return chr($n & 255).chr(($n >> 8) & 255).chr(($n >> 16) & 255).chr(($n >> 24) & 255);
}
function int_to_word($n)
{
return chr($n & 255).chr(($n >> 8) & 255);
}


function decbin8($d)
{
return decbinx($d,8);
};

function decbinx($d,$n)
{
$bin=decbin($d);
$sbin=strlen($bin);
for($j=0;$j<$n-$sbin;$j++)
$bin="0$bin";
return $bin;
};

function inttobyte($n)
{
return chr($n);
};






/*##############################################################################
Функция img_resize(): генерация thumbnails
Параметры:
$src - имя исходного файла
$dest - имя генерируемого файла
$width, $height - ширина и высота генерируемого изображения, в пикселях
Необязательные параметры:
$rgb - цвет фона, по умолчанию - белый
$quality - качество генерируемого JPEG, по умолчанию - максимальное (100)
$fon - указывает, если картинка получается меньше указанных размеров, тогда заполнить избыток фоном.
#################################################################################*/

function img_resize($src, $dest, $width, $height, $quality=100, $rgb=0xFFFFFF, $fon=0)
{
if (!file_exists($src)) return false;

$size = getimagesize($src);

if ($size === false) return false;
$quality=(int)$quality; // приводим качество к инту, чтобы не было проблем
$width=(int)$width; // тоже и с размерами
$height=(int)$height;

// если качество меньше 1 или больше 99, тогда ставим его 100
if($quality<1 OR $quality>99)
{
$quality=100;
}


// если вдруг не пришла высота или ширина, тогда размеры будем оставлять как размеры самой картинки, без уменьшения
if(!$width OR !$height)
{
$width=$size[0];
$height=$size[1];
}

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

if($size[0]<$width AND $size[1]<$height)
{
$width=$size[0];
$height=$size[1];
}



// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.

$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));

$icfunc = "imagecreatefrom" . $format;

if (!function_exists($icfunc)) return false;

$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];

$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);

$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);


$isrc = $icfunc($src);

if($fon)
{
$idest = imagecreatetruecolor($width, $height); // так создается картинка узаканного размера, а все где картинки нет, заполнится фоном. чтобы так создавать картинку, нижнюю строку надо удалить, а с этой снять комментарии
}
else
{
$new_left = 0;
$new_top = 0;
$idest = imagecreatetruecolor($new_width, $new_height);
}

imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);

imagejpeg($idest, $dest, $quality);

imagedestroy($isrc);
imagedestroy($idest);

return true;

}
################################################################
?>


Спустя 6 минут, 33 секунды (21.12.2011 - 18:49) Ramzil_Nixon написал(а):
Xes, мне хотелось бы самому написать, и понять, как она работает smile.gif

Спустя 12 минут, 32 секунды (21.12.2011 - 19:02) Xes написал(а):
Можно разобраться попримеру.
Может стоит заюзать функцию imagecreatetruecolor, каким либо образом.
Я не разбирался я с графикой не работаю, мне достаточно того что данный скрипт делает практически то что мне нужно. Допиливать его под себя пока руки не доходят.

Спустя 9 минут, 35 секунд (21.12.2011 - 19:12) kovaldm написал(а):
imagecopyresized() не пробовал?

Спустя 15 минут, 47 секунд (21.12.2011 - 19:27) Ramzil_Nixon написал(а):
kovaldm
В конце концов вместо: imagecreate();

Использовал: imagecreatetruecolor();

Спустя 23 минуты, 32 секунды (21.12.2011 - 19:51) killer8080 написал(а):
Цитата (Ramzil_Nixon @ 21.12.2011 - 18:27)
В конце концов вместо: imagecreate();

Использовал: imagecreatetruecolor();

а как иначе, если работаешь с фотографиями smile.gif

Спустя 11 минут, 28 секунд (21.12.2011 - 20:02) sergeiss написал(а):
Цитата (Ramzil_Nixon @ 21.12.2011 - 18:47)
$temp=imagecreate($width, $height);

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

Из хэлпа:

bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )


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

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.