Class: Image

Door Bo az, 20 jaar geleden, 6.195x bekeken

Met deze image class kunnen gemakkelijk thumbnails worden gemaakt en watermerken worden toegevoegd. Handig voor bijvoorbeeld een fotoalbum.
Deze class kan met alle formaten overweg die ondersteund worden door de beschikbare GD versie.

Functionaliteit:



    Documentatie:
    Uitgebreide documentatie is beschikbaar op: http://php.n3rd.nl/clsImage/doc/

    Wijzigingen:
    versie 1.5:
    - Crop method toegevoegd.
    versie 1.4:
    - Fout uit de resize methode hersteld.

    Voorbeelden:
    Een aantal voorbeelden zijn hier te bekijken: http://php.n3rd.nl/clsImage/example.html
    Echt leuk wordt het natuurlijk pas in combinatie met een Iterator. Het volgende voorbeeld maakt, met behulp van DirectoryIterator, van alle files in een map thumbnails in een andere map.
    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
    <?php

    try{

        // -- load the image class
        require_once 'image.inc.php';
        
        // -- Make an instance of DirectoryIterator
        $oDir = new DirectoryIterator('./big/');
        
        // -- Loop the dir
        foreach($oDir as $oFile){
            
            // -- Try making a thumb on failure, continue
            try{
                echo $oFile->getFilename();
                
                // -- make an instance and load a file
                $oImage = new clsImage('./big/'.$oFile->getFilename());
                
                // -- Resize the image
                $oImage->resize(100, true);
                
                // -- save the file, other directory, same name, overwrite
                $oImage->saveAs('./small/', null, true);
                
                echo ' -> success<br>';
            }
    catch(Exception $e){
                echo ' -> failed<br>';
            }
        }
        
    }
    catch(Exception $e){
        echo 'Error: '.$e->getMessage();
    }


    ?>

    Voorbeeld: http://php.n3rd.nl/clsImage/example.html

    Gesponsorde koppelingen

    PHP script bestanden

    1. class-image

     

    Er zijn 30 reacties op 'Class image'

    PHP hulp
    PHP hulp
    0 seconden vanaf nu
     

    Gesponsorde koppelingen
    Crispijn -
    Crispijn -
    20 jaar geleden
     
    0 +1 -0 -1
    Quote:
    Deze class kan met alle formaten overweg die ondersteund worden door de beschikbare GD versie.


    Betekend dat dat je ook gifjes kan resizen en de transparantie en animatie kan behouden? Dit is imo wel mogelijk met de juiste GD versie.

    Ziet er verder goed uit! Ik ga 'm denk ik herschrijven zodat ik plaatjes in mijn DB kan opslaan!
    Leroy Boerefijn
    Leroy Boerefijn
    20 jaar geleden
     
    0 +1 -0 -1
    grappig!
    alleen die thumbnail is vierkant, waardoor de verhoudingen niet helemaal meer kloppen..
    K i p
    K i p
    20 jaar geleden
     
    0 +1 -0 -1
    Erg leuk ook mooi voorbeeld!
    Vincent
    Vincent
    20 jaar geleden
     
    0 +1 -0 -1
    Machtig! Mooi script + netjes gescript! Gefeliciteerd Boaz zal ik zeggen :-P
    Ponzi
    Ponzi
    20 jaar geleden
     
    0 +1 -0 -1
    Mooi werk !
    Bo az
    Bo az
    20 jaar geleden
     
    0 +1 -0 -1
    @Crispijn: Met die ondersteuning doel ik eigenlijk op GIF/JPEG/PNG, of de transparantie en of animatie behouden worden heb ik niet op getest, gebruik het zelf momenteel alleen voor foto's.

    @Lero: De verhoudingen kan je instellen, standaard behoud ie de originele verhoudingen, maar als je de 2e parameter van de resize methode op true zet maakt ie het plaatje even breed als hoog. Al die instellingen kan je in de documentatie terug vinden.

    @all: thnx :$
    Menno
    menno
    20 jaar geleden
     
    0 +1 -0 -1
    Zeer goed script
    Goed te gebruiken in mijn image upload website :)

    Kan ik ook ervaring in het image gedeelte van php :P
    - -
    - -
    20 jaar geleden
     
    0 +1 -0 -1
    Wouw! Heel netjes, ga ik vast nog wel eens wat aan hebben.
    Niek s
    niek s
    20 jaar geleden
     
    0 +1 -0 -1
    Lekkere class! Netjes gedaan :) thnq for sharing!
    Pim Vernooij
    Pim Vernooij
    20 jaar geleden
     
    0 +1 -0 -1
    Mooie class! Ik begrijp je naamgeving alleen niet: clsImage? (Doen overigens een hele hoop mensen). Wat is de meerwaarde van 'cls' precies?
    Mark Pieper
    Mark Pieper
    20 jaar geleden
     
    0 +1 -0 -1
    @hierboven, dan weet je dat het om een class gaat.
    Bo az
    Bo az
    20 jaar geleden
     
    0 +1 -0 -1
    @Pim, Als je dan na een tijdje nog eens naar de code kijkt, zie je meteen dat het om een eigen geschreven class gaat. Maar ik denk dat het voor namelijk komt omdat ik ooit PHP 5 Superboek gelezen heb ;) (daar doen ze dat ook.)
    Pim Vernooij
    Pim Vernooij
    20 jaar geleden
     
    0 +1 -0 -1
    @Mark: noem eens een andere situatie dat je "new Instance();" gebruikt? dat zijn altijd klassen ;) We hebben het niet over een variabele als je dat bedoelt.

    @Boaz: ah vandaar, dus puur automatisme :)
    RvW Of toch niet
    RvW Of toch niet
    18 jaar geleden
     
    0 +1 -0 -1
    Boaz aller eerst tnx for sharing.
    vroeg me alleen af of je die voorbeelden nog ergens heb staan
    Bo az
    Bo az
    18 jaar geleden
     
    0 +1 -0 -1
    De documentatie niet (maar die is ook zelf te genereren / af te leiden uit de phpdoc) maar de voorbeelden staan weer online.
    Joachim vanthuyne
    joachim vanthuyne
    18 jaar geleden
     
    0 +1 -0 -1
    Ik krijg altijd deze foutmelding

    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    2
    3
    Fatal error: Call to undefined function imagetypes() in c:\wamp\www\image\image.inc.php on line 77

    Fatal error: Call to undefined function imagedestroy() in c:\wamp\www\image\image.inc.php on line 96


    Ik weet niet wat hiervan de oorzaak kan zijn , weet iemand dit misschien?
    Hipska BE
    Hipska BE
    18 jaar geleden
     
    0 +1 -0 -1
    Je moet wel de GD lib hebben he, dit staat vanboven vermeld..
    Joachim vanthuyne
    joachim vanthuyne
    18 jaar geleden
     
    0 +1 -0 -1
    Ahzo misschien een domme vraag, maar waar kan ik die halen en hoe installeer ik die. Ik ben niet zo vertrouwd met Library's.
    Richard van Velzen
    Richard van Velzen
    18 jaar geleden
     
    0 +1 -0 -1
    GD zit bij PHP. Je moet het wel aanzetten in php.ini. :-)
    Joachim vanthuyne
    joachim vanthuyne
    18 jaar geleden
     
    0 +1 -0 -1
    Ok , ik heb het aangezet in php.ini maar nu krijg ik dit
    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    2
    Warning: Cannot modify header information - headers already sent by (output started at c:\wamp\www\image\image.inc.php:421) in c:\wamp\www\image\image.inc.php on line 407
    &#65533;JFIF&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;>CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality &#65533;C&#65533;    $.' ",#(7),01444'9=82<.342&#65533;C  2!!22222222222222222222222222222222222222222222222222&#65533;"&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533;&#65533;&#65533;}&#65533;!1AQa"q2#BR$3br 
    Joachim vanthuyne
    joachim vanthuyne
    18 jaar geleden
     
    0 +1 -0 -1
    Problem solved

    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    2
    3
    4
    5
    6
    7
    8
    public function display()
    {
     header('Content-type: '.image_type_to_mime_type($this->m_iImageType));
      $output = ob_get_contents();
      ob_end_clean();
     $this->createImage();

     }
    Cees St
    Cees St
    18 jaar geleden
     
    0 +1 -0 -1
    Toeval?

    Was net voornemens mijn image Class te herschrijven, want mijn oude was nog een php4 versie, zie ik deze class.
    Nette code, ik heb nog niet alles precies kunnen uit vogelen en wil het toch al gebruiken. Ik ben vergeten hoe ik on the fly het image kan gebruiken.
    Met thumbnails is het bij een klein aantal, of veel verschillen, handig deze on the fly te gebruiken, dus niet saven maar rechtstreeks naar de browser.
    Misschien zit het er in, maar zover ik nu kan ziet doet hij bij alles een save to.

    Dus mijn vraag is, kan dat met deze class of moet ik dat er nog bij in bouwen.
    Bo az
    Bo az
    18 jaar geleden
     
    0 +1 -0 -1
    @Cees: dat kan met de display methode, deze geeft de afbeelding direct weer. De documentatie heb ik nu niet online instaan daar zou je dat uit kunnen halen, maar het voorbeeld geeft ook een paar handige tips.
    Cees St
    Cees St
    18 jaar geleden
     
    0 +1 -0 -1
    Dank Boaz, ik heb het gevonden. Het was de een na laatste functie hahahaha, dus die heb ik nu ook gevonden.
    Nogmaals mijn compliment, erg nette source code.
    Dennis Mertens
    Dennis Mertens
    18 jaar geleden
     
    0 +1 -0 -1
    Machtig mooi script :)
    Arian Stolwijk
    Arian Stolwijk
    18 jaar geleden
     
    0 +1 -0 -1
    Hier een verbeterde versie van de resize method:
    - Je kunt een maximale breedte of hoogte onafhankelijk vanelkaar instellen. Dus breedte mag niet meer zijn dan 500, terwijl hij ook niet hoger mag zijn dan 300
    - Transparante png's en gif's

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
        /**
         * Resize the image
         *
         * @param int|array max image size in px
         * @param boolean The width/height proportion keeps the same
         * @param boolean Make not bigger (the image wil not be made bigger than the original)
         */

        public function resize($p_iDimension, $p_bProportional=true, $p_bNotBigger=true){
            $iWidth = imagesx($this->m_rImage);
            $iHeight = imagesy($this->m_rImage);
            
            // Set new x and y (width and height)
            if(is_array($p_iDimension)){
                list($iSizeX,$iSizeY) = $p_iDimension;
                $iSizeX = (int)$iSizeX;
                $iSizeY = (int)$iSizeY;
            }
    else{
                $iSizeX = $iSizeY = $p_iDimension;
            }

            
            
            if($p_bProportional){
                $x_scale = $iSizeX / $iWidth;
                $y_scale = $iSizeY / $iHeight;
                
                $scale = $x_scale < $y_scale ? $x_scale : $y_scale;
                $scale = $scale > 1 && $p_bNotBigger ? 1 : $scale;
                
                $iSizeX = $iWidth * $scale;
                $iSizeY = $iHeight * $scale;
            }

            
            // if the scale is exactly 1, no resizing is needed :)
            if(!isset($scale) || $scale != 1){
            
                $rResisedImage = imagecreatetruecolor($iSizeX, $iSizeY);
                
                // Check for transparent images
                if($this->getImageType() == IMAGETYPE_GIF || $this->getImageType() == IMAGETYPE_PNG){
                    $trnprt_indx = imagecolortransparent($this->m_rImage);
        
                    if ($trnprt_indx >= 0) {
                        $trnprt_color = imagecolorsforindex($this->m_rImage, $trnprt_indx);
                        $trnprt_indx = imagecolorallocate($rResisedImage, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
                        imagefill($rResisedImage, 0, 0, $trnprt_indx);
                        imagecolortransparent($rResisedImage, $trnprt_indx);
                    }
    elseif ($this->getImageType() == IMAGETYPE_PNG) {
                        imagealphablending($rResisedImage, false);
                        $color = imagecolorallocatealpha($rResisedImage, 0,0,0, 127);
                        imagefill($rResisedImage, 0, 0, $color);
                        imagesavealpha($rResisedImage, true);
                    }
                }

                
                imagecopyresampled($rResisedImage, $this->m_rImage, 0, 0, 0, 0, $iSizeX, $iSizeY, $iWidth, $iHeight);
                $this->m_rImage = $rResisedImage;
            }
        }

    ?>
    Maurits de Koning
    Maurits de Koning
    17 jaar geleden
     
    0 +1 -0 -1
    Hallo,
    Ik gebruik dit scriptje inmiddels om van geuploade foto's thumbnails te maken. De foto's worden in de database opgeslagen met als: "id_bestandsnaam.extensie"
    Helaas zijn geresizede jpg plaatjes opgeslagen als .jpeg met als gevolg dat de naam in de database niet meer klopt en ook de namen van de thumbnail en het origineel niet meer overeen komen.

    Wat is hieraan te doen?? Ik ben nog een tamelijke noob op dit gebied:|.

    mvg Maurits
    Bo az
    Bo az
    17 jaar geleden
     
    0 +1 -0 -1
    Ja dat klopt, dat is een nadeel, ik denk dat de makkelijkste oplossing is om op regel 397 image_type_to_extension te vervangen door een eigenfunctie die er ongeveer zo uitziet:

    Code (php)
    PHP script in nieuw venster Selecteer het PHP script
    1
    2
    3
    4
    5
    6
    7
    8
    function my_image_type_to_extension ($type, $dot = true)
        {
            $e = array ( 1 => 'gif', 'jpg', 'png', 'swf', 'psd', 'bmp'
                'tiff', 'tiff', 'jpc', 'jp2', 'jpf', 'jb2', 'swc',
                'aiff', 'wbmp', 'xbm');

            return ($dot ? '.' : '') . $e[$type];
        }
    PHP hulp
    PHP hulp
    0 seconden vanaf nu
     

    Gesponsorde koppelingen
    Maurits de Koning
    Maurits de Koning
    17 jaar geleden
     
    0 +1 -0 -1
    Ah, top..
    Dit werkt goed, het script is nu perfect voor mij..
    Heel erg bedankt.

    Om te reageren heb je een account nodig en je moet ingelogd zijn.

    Inhoudsopgave

    1. class-image

    Labels

    • Geen tags toegevoegd.

    Navigatie

     
     

    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.