Ankündigung

Einklappen
Keine Ankündigung bisher.

gdlib, verkleiner gif

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • gdlib, verkleiner gif

    Hallo,
    folgendes Problem:
    Der folgende Code:
    PHP-Code:
    imagecreatefromgif('frame06.gif'); 
    verkleinert das urprungsbild:
    Aus

    wird


    Muss ich tatsächlich die koordinaten des ersten und letzten farbigen pixel auslesen(x und y-Achse) um danach ein ein Bild zu erstellen und das gif dann an hand dieser koordinaten an die richtige pos. zu bringen?


  • #2
    Muss man da jetzt was erkennen?
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Das erste bild hat oben und links freiraum, so wie es auch sein soll, beim zweiten bild, also nachdem imagecreatefromgif() rübergegangen ist ist dieser freiraum nicht mehr vorhanden.
      Er sucht sich, scheinbar den ersten farbigen Pixel in X-Achse und in Y-Achse und schneidet den Rest ab.

      Kommentar


      • #4
        Von einem solchen Problem höre ich zum ersten mal.

        Wie sieht der komplette Code aus ...?

        Kommentar


        • #5
          PHP-Code:
          <?php
          $imgA 
          = @imagecreatefromgif('frame06.gif');
          imagegif($imgA,'testertest.gif');
          ?>
          frame06.gif wurde mit dem Encoder V3 von László Zsidi erstellt:
          PHP-Code:
          <?php
          /*
          :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          ::
          ::      GIFEncoder Version 3.0 by László Zsidi, http://gifs.hu
          ::
          ::      This class is a rewritten 'GifMerge.class.php' version.
          ::
          ::  Modification:
          ::   - Simplified and easy code,
          ::   - Ultra fast encoding,
          ::   - Built-in errors,
          ::   - Stable working
          ::
          ::
          ::      Updated at 2007. 02. 13. '00.05.AM'
          ::
          ::
          ::
          ::  Try on-line GIFBuilder Form demo based on GIFEncoder.
          ::
          ::  http://gifs.hu/phpclasses/demos/GifBuilder/
          ::
          :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
          */

          Class GIFEncoder {
                  var 
          $GIF "GIF89a";            /* GIF header 6 bytes   */
                  
          var $VER "GIFEncoder V3.00";  /* Encoder version              */

                  
          var $BUF = Array ( );
                  var 
          $OFS = Array ( );
                  var 
          $SIG =  0;
                  var 
          $LOP =  0;
                  var 
          $DIS =  2;
                  var 
          $COL = -1;
                  var 
          $IMG = -1;

                  var 
          $ERR = Array (
                          
          'ERR00'=>"Does not supported function for only one image!",
                          
          'ERR01'=>"Source is not a GIF image!",
                          
          'ERR02'=>"Unintelligible flag ",
                          
          'ERR03'=>"Does not make animation from animated GIF source",
                  );

                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFEncoder...
                  ::
                  */
                  
          function GIFEncoder     (
                                                                  
          $GIF_src$GIF_dly$GIF_lop$GIF_dis,
                                                                  
          $GIF_red$GIF_grn$GIF_blu$GIF_ofs,
                                                                  
          $GIF_mod
                                                          
          ) {
                          if ( ! 
          is_array $GIF_src ) && ! is_array $GIF_dly ) ) {
                                  
          printf  "%s: %s"$this->VER$this->ERR 'ERR00' ] );
                                  exit    ( 
          );
                          }
                          if ( 
          is_array $GIF_ofs ) && count $GIF_ofs ) > ) {
                                  
          $this->SIG 1;
                                  
          $this->OFS $GIF_ofs;
                          }
                          
          $this->LOP $GIF_lop === false false : (( $GIF_lop > -) ? $GIF_lop 0);
                          
          $this->DIS = ( $GIF_dis > -) ? ( ( $GIF_dis ) ? $GIF_dis ) : 2;
                          
          $this->COL = ( $GIF_red > -&& $GIF_grn > -&& $GIF_blu > -) ?
                                                          ( 
          $GIF_red | ( $GIF_grn << ) | ( $GIF_blu << 16 ) ) : -1;

                          for ( 
          $i 0$i count $GIF_src ); $i++ ) {
                                  if ( 
          strToLower $GIF_mod ) == "url" ) {
                                          
          $this->BUF [ ] = fread fopen $GIF_src $i ], "rb" ), filesize $GIF_src $i ] ) );
                                  }
                                  else if ( 
          strToLower $GIF_mod ) == "bin" ) {
                                          
          $this->BUF [ ] = $GIF_src $i ];
                                  }
                                  else {
                                          
          printf  "%s: %s ( %s )!"$this->VER$this->ERR 'ERR02' ], $GIF_mod );
                                          exit    ( 
          );
                                  }
                                  if ( 
          substr $this->BUF $i ], 0) != "GIF87a" && substr $this->BUF $i ], 0) != "GIF89a" ) {
                                          
          printf  "%s: %d %s"$this->VER$i$this->ERR 'ERR01' ] );
                                          exit    ( 
          );
                                  }
                                  for ( 
          $j = ( 13 * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) ), $k TRUE$k$j++ ) {
                                          switch ( 
          $this->BUF $i ] { $j } ) {
                                                  case 
          "!":
                                                          if ( ( 
          substr $this->BUF $i ], ( $j ), ) ) == "NETSCAPE" ) {
                                                                  
          printf  "%s: %s ( %s source )!"$this->VER$this->ERR 'ERR03' ], ( $i ) );
                                                                  exit    ( 
          );
                                                          }
                                                          break;
                                                  case 
          ";":
                                                          
          $k FALSE;
                                                          break;
                                          }
                                  }
                          }
                          
          GIFEncoder::GIFAddHeader ( );
                          for ( 
          $i 0$i count $this->BUF ); $i++ ) {
                                  
          GIFEncoder::GIFAddFrames $i$GIF_dly $i ] );
                          }
                          
          GIFEncoder::GIFAddFooter ( );
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFAddHeader...
                  ::
                  */
                  
          function GIFAddHeader ( ) {
                          
          $cmap 0;

                          if ( 
          ord $this->BUF ] { 10 } ) & 0x80 ) {
                                  
          $cmap * ( << ( ord $this->BUF ] { 10 } ) & 0x07 ) );

                                  
          $this->GIF .= substr $this->BUF ], 67           );
                                  
          $this->GIF .= substr $this->BUF ], 13$cmap      );
                                  if(
          $this->LOP !== false)
                                  {
                                          
          $this->GIF .= "!\377\13NETSCAPE2.0\3\1" GIFEncoder::GIFWord $this->LOP ) . "\0";
                                  }
                          }
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFAddFrames...
                  ::
                  */
                  
          function GIFAddFrames $i$d ) {

                          
          $Locals_str 13 * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) );

                          
          $Locals_end strlen $this->BUF $i ] ) - $Locals_str 1;
                          
          $Locals_tmp substr $this->BUF $i ], $Locals_str$Locals_end );

                          
          $Global_len << ( ord $this->BUF 0  ] { 10 } ) & 0x07 );
                          
          $Locals_len << ( ord $this->BUF $i ] { 10 } ) & 0x07 );

                          
          $Global_rgb substr $this->BUF 0  ], 13,
                                                                  
          * ( << ( ord $this->BUF 0  ] { 10 } ) & 0x07 ) ) );
                          
          $Locals_rgb substr $this->BUF $i ], 13,
                                                                  
          * ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ) );

                          
          $Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
                                                          
          chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . "\x0\x0";

                          if ( 
          $this->COL > -&& ord $this->BUF $i ] { 10 } ) & 0x80 ) {
                                  for ( 
          $j 0$j < ( << ( ord $this->BUF $i ] { 10 } ) & 0x07 ) ); $j++ ) {
                                          if      (
                                                          
          ord $Locals_rgb $j } ) == ( ( $this->COL >> 16 ) & 0xFF ) &&
                                                          
          ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF ) &&
                                                          
          ord $Locals_rgb $j } ) == ( ( $this->COL >>  ) & 0xFF )
                                                  ) {
                                                  
          $Locals_ext "!\xF9\x04" chr ( ( $this->DIS << ) + ) .
                                                                                  
          chr ( ( $d >> ) & 0xFF ) . chr ( ( $d >> ) & 0xFF ) . chr $j ) . "\x0";
                                                  break;
                                          }
                                  }
                          }
                          switch ( 
          $Locals_tmp } ) {
                                  case 
          "!":
                                          
          $Locals_img substr $Locals_tmp810 );
                                          
          $Locals_tmp substr $Locals_tmp18strlen $Locals_tmp ) - 18 );
                                          break;
                                  case 
          ",":
                                          
          $Locals_img substr $Locals_tmp010 );
                                          
          $Locals_tmp substr $Locals_tmp10strlen $Locals_tmp ) - 10 );
                                          break;
                          }
                          if ( 
          ord $this->BUF $i ] { 10 } ) & 0x80 && $this->IMG > -) {
                                  if ( 
          $Global_len == $Locals_len ) {
                                          if ( 
          GIFEncoder::GIFBlockCompare $Global_rgb$Locals_rgb$Global_len ) ) {
                                                  
          $this->GIF .= ( $Locals_ext $Locals_img $Locals_tmp );
                                          }
                                          else {
                                                  
          /*
                                                   *
                                                   * XY Padding...
                                                   *
                                                   */
                                                  
          if ( $this->SIG == ) {
                                                          
          $Locals_img } = chr $this->OFS $i ] [ ] & 0xFF );
                                                          
          $Locals_img } = chr ( ( $$this->OFS $i ] [ ] & 0xFF00 ) >> );
                                                          
          $Locals_img } = chr $this->OFS $i ] [ ] & 0xFF );
                                                          
          $Locals_img } = chr ( ( $this->OFS $i ] [ ] & 0xFF00 ) >> );
                                                  }
                                                  
          $byte  ord $Locals_img } );
                                                  
          $byte |= 0x80;
                                                  
          $byte &= 0xF8;
                                                  
          $byte |= ( ord $this->BUF ] { 10 } ) & 0x07 );
                                                  
          $Locals_img } = chr $byte );
                                                  
          $this->GIF .= ( $Locals_ext $Locals_img $Locals_rgb $Locals_tmp );
                                          }
                                  }
                                  else {
                                          
          /*
                                           *
                                           * XY Padding...
                                           *
                                           */
                                          
          if ( $this->SIG == ) {
                                                  
          $Locals_img } = chr $this->OFS $i ] [ ] & 0xFF );
                                                  
          $Locals_img } = chr ( ( $$this->OFS $i ] [ ] & 0xFF00 ) >> );
                                                  
          $Locals_img } = chr $this->OFS $i ] [ ] & 0xFF );
                                                  
          $Locals_img } = chr ( ( $this->OFS $i ] [ ] & 0xFF00 ) >> );
                                          }
                                          
          $byte  ord $Locals_img } );
                                          
          $byte |= 0x80;
                                          
          $byte &= 0xF8;
                                          
          $byte |= ( ord $this->BUF $i ] { 10 } ) & 0x07 );
                                          
          $Locals_img } = chr $byte );
                                          
          $this->GIF .= ( $Locals_ext $Locals_img $Locals_rgb $Locals_tmp );
                                  }
                          }
                          else {
                                  
          $this->GIF .= ( $Locals_ext $Locals_img $Locals_tmp );
                          }
                          
          $this->IMG  1;
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFAddFooter...
                  ::
                  */
                  
          function GIFAddFooter ( ) {
                          
          $this->GIF .= ";";
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFBlockCompare...
                  ::
                  */
                  
          function GIFBlockCompare $GlobalBlock$LocalBlock$Len ) {


                          for ( 
          $i 0$i $Len$i++ ) {
                                  if      (
                                                  
          $GlobalBlock $i } != $LocalBlock $i } ||
                                                  
          $GlobalBlock $i } != $LocalBlock $i } ||
                                                  
          $GlobalBlock $i } != $LocalBlock $i }
                                          ) {
                                                  return ( 
          );
                                  }
                          }

                          return ( 
          );
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GIFWord...
                  ::
                  */
                  
          function GIFWord $int ) {

                          return ( 
          chr $int 0xFF ) . chr ( ( $int >> ) & 0xFF ) );
                  }
                  
          /*
                  :::::::::::::::::::::::::::::::::::::::::::::::::::
                  ::
                  ::      GetAnimation...
                  ::
                  */
                  
          function GetAnimation ( ) {
                          return ( 
          $this->GIF );
                  }
          }
          Mit dem Funtkionsaufruf:
          PHP-Code:
          <?php
              
          include_once ("GIFDecoder.class.php" );

              
          $animation 'test.gif';

                
          $gifDecoder = new GIFDecoder fread fopen $animation"rb" ), filesize $animation ) ) );

              
          $i 5;
              foreach ( 
          $gifDecoder -> GIFGetFrames ( ) as $frame ) {
                  if ( 
          $i 10 ) {
                      
          fwrite fopen "frames/frame0$i.gif" "wb" ), $frame );
                  }
                  else {
                      
          fwrite fopen "frames/frame$i.gif" "wb" ), $frame );
                  }
                  
          $i++;
                  
              }
          ?>
          Ich möchte diese Frames verkleinern und mit dem decoder wieder zu ein animierten gif machen.
          Das problem ist nur das der decoder teilweise die tranzparens bei den frames zerhaut.
          Dieses Problem kann ich lösen wenn ich die frames einzeln via imagecreatefromgif() neu erstelle.
          Wenn jetzt aber ein gif einen inhalt hat der mittig im bild liegt verkleinert er.
          Meine idee war ja aus dem gif ein png zu machen, danach in allen viereckpunkten schauen ob ein farbiges pixel existiert.
          Wenn nicht dann setzte eins, danach aus den png ein gif, das funktioniert auch.
          Nur kann ich hinterher die gesetzten schwarzen pixel nicht wieder in 100% transparente pixel machen.

          Kommentar

          Lädt...
          X