php image resize vaste height & width

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel van Seggelen

Daniel van Seggelen

09/04/2020 16:45:04
Quote Anchor link
Ik heb plaatjes van verschillende afmetingen.
kleine en grote.
Ik heb een vast formaat namelijk 531 breed en 550 hoog.

Ik wil een plaatje maken, en als van het originele plaatje de hoogte groter is als 531, dan moet hij hem rationeel verkleinen naar maximaal 531. Als dat de breedte ook groter is als 550 hetzelfde verhaal.
Ik wil de ratio houden, maar ze moeten alle2 passen in het vlak en dan ook nog gecentreerd.
Als een plaatje bij 100px hoog is, moet deze niet aan de top vastzitten, maar verticaal aligned worden.
De code hieronder doet het wel aardig, alleen als het originele plaatje een zwarte kleur heeft en ik maak het vaste vlak als een plaatje met een witte achtergrond(255, 255, 255), dan maakt hij het zwart in het plaatje ook lelijk wit. Ziet er niet meer uit.

Weet iemand hoe is dit het best kan bereiken? Het liefst zonder imagick.



Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$newWidth = 531;
    $newHeight = 550;

$url = 'D:\websites\jakarta-eventsnew\images\events\1\indobuildtech-expo-2020.jpg';
$destdir = 'D:\websites\jakarta-eventsnew\images\events\1\braakwater.jpg';
    // download and create gd image
    $image = ImageCreateFromString(file_get_contents($url));
    $width = ImageSX($image);
    $height = ImageSY($image);

    $coefficient =  $newHeight / $height;

    if ( $width > $newWidth) {
        $coefficient = $newWidth / $width;
    } else
        if ($height > $newHeight ) {
        $coefficient = $newHeight / $height;
    }
    
// if (($target_width / $width) > $coefficient) { $coefficient = $target_width / $width; }
    // create image
    $output = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($output, $image, 0, $height * $coefficient, 0, 0, $width * $coefficient, $height * $coefficient, $width, $height);
     $bg_color = imagecolorallocate ($output, 255, 255, 255);
     imagefill($output, 0, 0, $bg_color);
   // save image
   imagejpeg($output, $destdir, 100);
 
PHP hulp

PHP hulp

01/11/2024 01:00:19
 
- Ariën  -
Beheerder

- Ariën -

09/04/2020 16:56:20
Quote Anchor link
Zelf gebruik ik voor resizedoeleinden de uploadclass van verot.net. Een paar voordelen:

- Scheelt het wiel opnieuw uit te vinden.
- Veel bestaande software-pakketten gebruiken deze ook.
- Heel veel handige methods voor diverse bewerkingen.
- Ruime ondersteuning

Misschien is het een idee om naar te kijken.
 
Jan R

Jan R

09/04/2020 18:44:37
Quote Anchor link
Ik doe het zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
35
36
37
38
39
40
41
42
43
44
45
<?php
    $f
='mijn volledig pad naar de foto';
    $mtc = mime_content_type($f);
    $ok = false;
    switch ($mtc) {
        case
'image/jpeg':
            header("Content-Type: image/jpeg");
            $im = imagecreatefromjpeg($f);
            $ok = true;
            break;
        case
'image/png':
            header("Content-Type: image/png");
            $im = @imagecreatefrompng($f);
            $ok = true;
            break;
        case
'image/gif':
            header("Content-Type: image/gif");
            $im = imagecreatefromgif($f);
            $ok = true;
            break;
        case
'image/bmp':
            header("Content-Type: image/bmp");
            $im = imagecreatefrombmp($f);
            $ok = true;
            break;
        case
'image/x-ms-bmp':
            header("Content-Type: image/x-ms-bmp");
            $im = imagecreatefrombmp($f);
            $ok = true;
            break;
    }

    list($width, $height) = getimagesize($f);
    $bgc=imagecolorallocate($im, 255, 255, 255);
    $tc=imagecolorallocate($im, 0, 0, 0);
    $newheight = 50;
    
    $procent = $width / $height;
    $newwidth=$newheight*$procent;
    $thumb =imagecreatetruecolor($newwidth, $newheight);
    imageCopyResized($thumb, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    imagepng($thumb);
    imagedestroy($im);
    imagedestroy($thumb);
    return $thumb;
?>

wel natuurlijk $newheight aanpassen aan jouw eisen
Eventueel verder controleren of alle types ondersteunt worden welke je aanvaard.

Jan
 
Daniel van Seggelen

Daniel van Seggelen

10/04/2020 20:47:37
Quote Anchor link
Dit werkt perfect, bedankt!
 
Thomas van den Heuvel

Thomas van den Heuvel

10/04/2020 23:05:21
Quote Anchor link
Maar in de code van @JanR gebeuren een aantal dingen die niet nodig zijn als je puur een afbeelding wilt opslaan, en de code kan waarschijnlijk wel wat korter, en er kan ook wel wat meer foutafhandeling in. Die $ok doet trouwens niets?

Simpelweg omdat iets werkt, maakt het nog niet juist.
Gewijzigd op 10/04/2020 23:05:39 door Thomas van den Heuvel
 
Daniel van Seggelen

Daniel van Seggelen

22/04/2020 17:31:21
Quote Anchor link
Ik verwees naar de uploadclass van verot.net wat werkte.
 
Jan R

Jan R

24/04/2020 07:14:32
Quote Anchor link
Thomas van den Heuvel op 10/04/2020 23:05:21:
en de code kan waarschijnlijk wel wat korter, en er kan ook wel wat meer foutafhandeling in.

twee maal juist :)

Thomas van den Heuvel op 10/04/2020 23:05:21:
Die $ok doet trouwens niets?

In de volledige code wel. vergeten opkuisen. sorry
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.