Съвет за пропорционално намаляне размер на картинка

Meniak

Registered
Здравеите, Имате ли на идея как и с какво мога да направя така че като качвам някаква картинка jpg - png няма значение с каквито и да е размери тя да се смалява пропорционално на размери 80px x 80px.

Примерно взимам една картинка 430px. x 350px. да речем и като я кача на сарвара тя да стане 80px. x 80px. обаче да не е разтеглена свита или там някво изкривяване а да си е като оригиналната но с размер 80px. x 80px. Надявам се че ме разбрахте.
 
Meniak каза:
Здравеите, Имате ли на идея как и с какво мога да направя така че като качвам някаква картинка jpg - png няма значение с каквито и да е размери тя да се смалява пропорционално на размери 80px x 80px.

Примерно взимам една картинка 430px. x 350px. да речем и като я кача на сарвара тя да стане 80px. x 80px. обаче да не е разтеглена свита или там някво изкривяване а да си е като оригиналната но с размер 80px. x 80px. Надявам се че ме разбрахте.

Не може да е правопропорционално и да остане 80x80, това значи квадрат. Другия начин да режеш е например с jCrop да се избира да се селектира часта от картинката, като селекцията е с равни пропорции 1:1 от към height и width и след това да си я оразмериш до 80x80px.

Ето въпросния плъгин - http://code.google.com/p/jcrop/
 
Аз пробвах много начини да направя това но не успях и за това реших вас да попитам може пак някои вече да е открил топлата вода както се казва но като гледам ще си ги режа с гимпа . Благодаря.
 
Ок, не съм била права.

PHP-ГУРУ каза:
взимаш пропорциите и правиш снимката да не е над 80 пиксела ширина и височина и генерираш празна картинка с PHP и после слагаш ресайзнатата върху генерираната
и един вид става бекграунд тази картинка която си генерирал с PHP
 
Малко набързо го сглобих, но виж това дали ще ти свърши работа:


PHP:
    function resize($file, $newfile, $width = 0, $height = 0) {
		$imginfo = getimagesize($file);

		$info = array(
        	'width'  => $imginfo[0],
        	'height' => $imginfo[1],
        	'bits'   => $imginfo['bits'],
        	'mime'   => $imginfo['mime']
    	);
    	
	    $mime = $info['mime'];
		if ($mime == 'image/gif') 
			$image = imagecreatefromgif($image);
		elseif ($mime == 'image/png') 
			$image = imagecreatefrompng($image);
		elseif ($mime == 'image/jpeg') 
			$image = imagecreatefromjpeg($image);
		
		$xpos = 0;
		$ypos = 0;

		$scale = min($width / $info['width'], $height / $info['height']);
		
		$new_width = (int)($info['width'] * $scale);
		$new_height = (int)($info['height'] * $scale);			
    	$xpos = (int)(($width - $new_width) / 2);
   		$ypos = (int)(($height - $new_height) / 2);

        $newimage = imagecreatetruecolor($width, $height);
		
		if (isset($info['mime']) and $info['mime'] == 'image/png') {		
			imagealphablending($newimage, false);
			imagesavealpha($newimage, true);
			$background = imagecolorallocatealpha($newimage, 255, 255, 255, 127);
			imagecolortransparent($newimage, $background);
		} else {
			$background = imagecolorallocate($newimage, 255, 255, 255);
		}
		
		imagefilledrectangle($this->image, 0, 0, $width, $height, $background);
	
        imagecopyresampled($newimage, $image, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->info['width'], $this->info['height']);

		if ($mime == 'image/gif') {
            imagegif($newimage, $newfile);
		} elseif ($mime == 'image/png') {
            imagepng($newimage, $newfile, 0);
		} elseif ($mime == 'image/jpeg') {
            imagejpeg($newimage, $newfile, 80);
		}

        imagedestroy($image);
        imagedestroy($newimage);
    }
 

Back
Горе