Avatar billede jarner Nybegynder
20. januar 2007 - 14:03 Der er 2 kommentarer og
1 løsning

Benyttelse af GDlib til gif-filer?

Hej

Jeg benytter nedenstående kode til at lave nogle thumbnails af nogle filer der uploades.

Det virker fint med rezize af jpeg-filer. Er der nogen der ved om man kan omskrive det til at virke med gif-filer også?
Avatar billede jarner Nybegynder
20. januar 2007 - 14:04 #1
Her er koden:

  function thumbimage ($image, $x, $y, $aspectratio, $resize, $cachedir){

          /*##############################################
          #          - Thumbnail-Script v1.3 -          #
          # Generating thumbnails 'on-the-fly' with PHP  #
          #                                              #
          #  (c) by Christian Lamine, FlashDreams OHG    #
          #          http://www.flashdreams.de/          #
          #                                              #
          #      Modified by http://www.tse.at          #
          #      Modified by lars@iwer.de              #
          #                                              #
          # This script may be freely used, distributed  #
          # and modified without any charge as long as  #
          # this copyright information is included.      #
          #                                              #
          # Any commercial selling of this script is    #
          # forbidden.                                  #
          #                                              #
          # The author is not responsible for possible  #
          # damage which may result from the application #
          # of this script, neither direct nor indirect. #
          # Use at your own risk!                        #
          ##############################################*/

    error_reporting(0);

    $types = array (1 => "gif", "jpeg", "png", "swf", "psd", "wbmp");
    $not_supported_formats = array ("GIF"); // Write in capital Letters!!
    umask(0);
    !is_dir ($cachedir)
        ? mkdir ($cachedir, 0777)
        : system ("chmod 0777 ".$cachedir);

      (!isset ($x) || ereg ('^[0-9]{1,}$', $x, $regs)) &&
      (!isset ($y) || ereg ('^[0-9]{1,}$', $y, $regs)) &&
      (isset ($x) || isset ($y))
            ? true
          : DIE ('Fehlende(r) oder ungültige(r) Größenparameter!');

    !isset ($resize) || !ereg ('^[0|1]$', $resize, $regs)
          ? $resize = 0
          : $resize;

    !isset ($aspectratio) || !ereg ('^[0|1]$', $aspectratio, $regs)
          ? isset ($x) && isset ($y)
                ? $aspectratio = 1
                : $aspectratio = 0
          : $aspectratio;

    !isset ($image)
          ? DIE ('Es wurde kein Bild angegeben!')
          : !file_exists($image)
              ? DIE ('Die angegebene Datei konnte nicht auf dem Server gefunden werden!')
              : false;

    $imagedata = getimagesize($image);

    !$imagedata[2] || $imagedata[2] == 4 || $imagedata[2] == 5
          ? DIE ('Bei der angegebenen Datei handelt es sich nicht um ein Bild!')
          : false;

    $imgtype="!(ImageTypes() & IMG_" . strtoupper($types[$imagedata[2]]) . ")";
    if ((eval($imgtype)) || (in_array(strtoupper(array_pop(explode('.', basename($image)))),$not_supported_formats))) {
        $image = substr ($image, (strrpos (DIR_FS_CATALOG . '/', '/'))+1);
        return $image;

    }

    if (!isset ($x)) $x = floor ($y * $imagedata[0] / $imagedata[1]);


    if (!isset ($y)) $y = floor ($x * $imagedata[1] / $imagedata[0]);

    if ($aspectratio && isset ($x) && isset ($y)) {
        if ((($imagedata[1]/$y) > ($imagedata[0]/$x) )){
            $x=ceil(($imagedata[0]/$imagedata[1])* $y);
        } else {
            $y=ceil($x/($imagedata[0]/$imagedata[1]));
        }
    }
    $thumbfile =  '/' . basename($image);
    if (file_exists ($cachedir.$thumbfile)) {
          $thumbdata = getimagesize ($cachedir.$thumbfile);
          $thumbdata[0] == $x && $thumbdata[1] == $y
              ? $iscached = true
              : $iscached = false;
            if (@filemtime($cachedir.$thumbfile) < @filemtime($image))
              $iscached = false;
    } else {
          $iscached = false;
    }

    if (!$iscached) {
          ($imagedata[0] > $x || $imagedata[1] > $y) || (($imagedata[0] < $x || $imagedata[1] < $y) && $resize)
              ? $makethumb = true
              : $makethumb = false;
    } else {
          $makethumb = false;
    }



    if ($makethumb) {
          $image = call_user_func("imagecreatefrom".$types[$imagedata[2]], $image);
      if (function_exists("imagecreatetruecolor") && ($thumb = imagecreatetruecolor ($x, $y))) {
        imagecopyresampled ($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]);
      } else {
        $thumb = imagecreate ($x, $y);
        imagecopyresized ($thumb, $image, 0, 0, 0, 0, $x, $y, $imagedata[0], $imagedata[1]);
      }
          call_user_func("image".$types[$imagedata[2]], $thumb, $cachedir.$thumbfile);
          imagedestroy ($image);
          imagedestroy ($thumb);
          $image = DIR_WS_IMAGES . 'imagecache' . $thumbfile;
    } else {
          $iscached
              ? $image = DIR_WS_IMAGES . 'imagecache' . $thumbfile
              : $image = substr ($image, (strrpos (DIR_FS_CATALOG . '/', '/'))+1);
    }
return $image;

}
Avatar billede jarner Nybegynder
20. januar 2007 - 14:09 #2
Ifølge http://www.phpbuilder.com/board/printthread.php?threadid=10236496 ser det dog ud til ikke at kunne lade sig gøre.

Lad mig høre hvis nogen har nogle forslag, så vil jeg lige undersøge om man kan benytte imagemagick i stedet.
Avatar billede jarner Nybegynder
08. februar 2007 - 11:19 #3
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester