webForumDet fria alternativet

bakgrundsfärg vid imagecreatefromjpeg

PHP

1 svar · 229 visningar · startad av soocks

Medlem sedan feb. 200240 inlägg
Frågan#1

jag håller på med ett script som ska förminska bilder till thumbnails, för användning i en webshop.

saken är den att thumbnailsen ska ha storleken 130x110 och är bredden/höjden mindre än detta ska motivet placeras utifrån mitten och resten fyllas med vit färg.

så lång har jag också kommit, förutom att den vita färgen är svart och skapar antingen två svarta fält på sidorna av motivet eller ovan och under.

kika på detta så kanske ni förstår bättre :)


ska bli >>


ska bli >>

har försökt med lite olika metoder att få dessa fält vita istället för svarta, men utan att lyckas. det närmaste jag kommit är med att använda fyllda rektanglar "över" det svarta, men det känns osmidigt.

finns det någon smidig lösning tro?

tack på förhand!

edit: ni får koden också :)


$srcImg = "bild.jpg";

$srcInfo = GetImageSize($srcImg);

$dstWidth = 130;
$dstHeight = 110;

if ($srcInfo[1] <= $srcInfo[0]) {
	

	$srcX = 0;
	$srcY = round(($srcInfo[1] - $srcInfo[0])/2);
	$srcW = $srcInfo[0];
	$srcH = $srcInfo[0];

	
} else {

	$srcX = round(($srcInfo[0] - $srcInfo[1])/2);
	$srcY = 0;
	$srcW = $srcInfo[1];
	$srcH = $srcInfo[1];

}

header ("Content-type: image/jpeg");

$im_src = imagecreatefromjpeg($srcImg);
$img_thumb = imageCreateTruecolor($dstWidth, $dstHeight);

imagecopyresampled ($img_thumb, $im_src, 0, 0, $srcX, $srcY, $dstWidth, $dstHeight, $srcW, $srcH);

imagejpeg($img_thumb);

ImageDestroy($img_thumb);
ImageDestroy($im_src);
Medlem sedan feb. 200240 inlägg
#2

verkar löst det själv, vet inte hur pass smidigt dock, men det funkar..


	$srcImg = "bild.jpg";
		
	$srcInfo = getimagesize($srcImg);
		
	
	$dstWidth = 130;
	$dstHeight = 110;
	
		
	if ($srcInfo[1] <= $srcInfo[0]) {
		$srcX = 0;
		$srcY = round(($srcInfo[1] - $srcInfo[0])/2);
		$srcWidth = $srcInfo[0];
		$srcHeight = $srcInfo[0];
		
		$fillX = $dstWidth;		
		$fillY = $srcY * -($dstHeight / $srcHeight);
		
		$fillXb = 0;			
		$fillYb = $dstHeight - $fillY;
		
	} else {
		$srcX = round(($srcInfo[0] - $srcInfo[1])/2);
		$srcY = 0;
		$srcWidth = $srcInfo[1];
		$srcHeight = $srcInfo[1];
		
		$fillX = $srcX * -($dstWidth / $srcWidth);		
		$fillY = $dstHeight;
		
		$fillXb = $dstWidth - $fillX;
		$fillYb = 0;
	
	}
	

	header ("Content-type: image/jpeg");
	header('Content-Disposition: inline; filename="prodimg.jpg"');
	
	$srcImg = imagecreatefromjpeg($srcImg);
	$dstImg = imagecreatetruecolor($dstWidth, $dstHeight);
	
	imagecopyresampled($dstImg, $srcImg, 0, 0, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight);
	
	
	$bgColor = imagecolorallocate($dstImg, 255,255,255);
	imagefilledrectangle($dstImg, 0, 0, $fillX, $fillY, $bgColor);
	imagefilledrectangle($dstImg, $fillXb, $fillYb, $dstWidth, $dstHeight, $bgColor);
	
	imagejpeg($dstImg, null, 100);
	
	imagedestroy($dstImg);
	imagedestroy($srcImg);
676 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
545 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
545 ms — ändringar (db)