Snijd afbeelding bij tot vierkant
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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);
?>
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);
?>
Een op een overgenomen en het werkt.
Toevoeging op 08/04/2020 18:28:54:
Ja Adoptive Solution, dat klopt. Ik heb een foutje gemaakt waardoor hij niet werkte. Zo gaat dat wel vaker met programmeren ;-)
Sluit wel directories en de rootmappen '.' en '..' uit.
Als je dit in de commandline kan draaien zou het helemaal mooi zijn.
Gewijzigd op 08/04/2020 18:31:09 door - Ariën -
Zoiets?
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$afbeeldingen = scandir('oud/');
foreach($afbeeldingen AS $afbeelding) {
cacheImage($afbeelding, 'nieuw', 800, 800);
}
?>
$afbeeldingen = scandir('oud/');
foreach($afbeeldingen AS $afbeelding) {
cacheImage($afbeelding, 'nieuw', 800, 800);
}
?>
Toevoeging op 08/04/2020 18:36:32:
Waarschijnlijk is dit een betere manier bedenk ik me net:
Code (php)
Gewijzigd op 08/04/2020 18:34:12 door Jeroen van Rensen
Waarom zie jij een for() beter dan een foreach?
Zie ook: https://www.w3schools.com/php/php_functions.asp
Gewijzigd op 08/04/2020 18:37:51 door - Ariën -
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?
foreach() { } voor array's.