Hallo,

Ik ben een webshop aan het maken. Ik wil dat de beheerder een afbeelding kan kiezen en dat deze geuploaded wordt. Maar in het design gebruik ik overal vierkanten met een witte achtergrond.

Alle afbeeldingen die geuploaded worden hebben al een witte achtergrond, maar zijn JPG-formaat. Bijvoorbeeld de afmetingen zijn 200x100 pixels. Dan wil ik dat hij links en rechts 50px witruimte toevoegt, zodat de afbeelding 200x200px is.

Heeft iemand een manier om dit te doen?

Bedankt!
Jeroen
Hier is mijn functie, er is eigenlijk niet veel veranderd.


<?php

function cacheImage($srcFile, $targetDir, $width, $height) {
	$src = imagecreatefromjpeg($srcFile);
	imagepalettetotruecolor($src);

	$dest = imagecreatetruecolor($width, $height);

	$white = imagecolorallocate($src, 255, 255, 255);
	imagefill($dest, 0, 0, $white);

	$r = imagesx($src) / imagesy($src);

	if(imagesx($src) > imagesy($src)) {
		$w = $width;
		$h = $height / $r;
		imagecopyresampled($dest, $src, 0, ($height-$h)/2, 0, 0, $w, $h, imagesx($src), imagesy($src));
	} else {
		$w = $width * $r;
		$h = $height;
		imagecopyresampled($dest, $src, ($width-$w)/2, 0, 0, 0, $w, $h, imagesx($src), imagesy($src));
	}

	@mkdir($targetDir, 0777, true);

	imagejpeg($dest, $targetDir . '/' . $srcFile);

	imagedestroy($dest);
	imagedestroy($src);
}

cacheImage('chiffon.jpg', 'nieuw', 800, 800);

?>
Er is nik mis met de eerdere code.

Een op een overgenomen en het werkt.
Nog één vraagje: kent iemand een manier om een hele map met foto's door deze functie te halen?

[size=xsmall]Toevoeging op 08/04/2020 18:28:54:[/size]

Ja Adoptive Solution, dat klopt. Ik heb een foutje gemaakt waardoor hij niet werkte. Zo gaat dat wel vaker met programmeren ;-)
Al gekeken naar scandir()?
Sluit wel directories en de rootmappen '.' en '..' uit.

Als je dit in de commandline kan draaien zou het helemaal mooi zijn.
En hoe maak ik hier een functie van?

Zoiets?


<?php

$afbeeldingen = scandir('oud/');

foreach($afbeeldingen AS $afbeelding) {
	cacheImage($afbeelding, 'nieuw', 800, 800);
}

?>


[size=xsmall]Toevoeging op 08/04/2020 18:36:32:[/size]

Waarschijnlijk is dit een betere manier bedenk ik me net:


<?php

$afbeeldingen = scandir('oud/');

for($x = 0; $x < count($afbeeldingen); $x++) {
    cacheImage($afbeeldingen[$x], 'nieuw', 800, 800);
}

?>
Ik heb geleerd mysqli_query-resultaten in foreach-loops te tonen, en normale array's in for-loops.
Uit welke cursus? Ik vermoed dat die nog over PHP 3 spreken? Wat dit klinkt niet echt gewoon.
Het is niet echt een cursus die ik gevolgd heb, maar zo heb ik het mezelf aangeleerd. Hoe zou jij het dan doen?
While() { } voor voornamelijk queries
foreach() { } voor array's.

Reageren