in reply to insert & retrieve images from DB to web

That seems a little weird. 89a is the animated gif format. You might be doing something you don't really want to do with your conversions. On that note, you'd probably be better off converting them to jpg instead of gif, they'll be smaller and more accurately matched files, unless the tiffs are 8-bit, in which case gif would be a directly comparable format.

  • Comment on Re: insert & retrieve images from DB to web

Replies are listed 'Best First'.
Re^2: insert & retrieve images from DB to web
by zentara (Cardinal) on Sep 05, 2008 at 13:11 UTC
    I got chastised by this before, so I remember it.......89a handles animation, but does not mean it is animated. It is a newer format that handles other things. 87a can be animated too. See Gif 87a/89a

    I'm not really a human, but I play one on earth Remember How Lucky You Are
      GIF89a is animated? ...interesting. This is the code that I'm using to convert the tif's to gif's:
      foreach (@image){ my $image=Image::Magick->new(); $image->Read($_); $image->Write(substr($image->Get('filename'), 0, length($image->Get('f +ilename'))-4).".gif"); }
      I manually opened one of my tif's and 'save as...' a gif in one of my graphic editing programs, opened the gif in notepad, and it still had the 'GIF89a' at the beginning of the string. What is the non-animated supposed to have?

      The original tif's are simple b&w scanned docs, so gif's are MUCH smaller than jpgs in this case. I read that node on handling blobs, but it referred to MB's of data. All the gif's ended up being between 5K-32K, so I assume (correct me if I'm wrong) that I don't have to deal with breaking the data up into chucks??? Will it speed things up if I do? It doesn't look like I'm losing any of the data in inserting or retrieving the data if the hex string is exactly double the raw data directly from the file.

      juster--I added the lines of code:
      my $rawData = pack 'H*', $data->{BackImg}; print $q->header(type=>'image/gif', Content_Length=>length($rawData)). +$rawData; if($blob ne $rawData){die $rawData."\nlength=".length($rawData)."\nfil +e image = ".$blob."\nlength=".length($blob);}
      ...but $rawData is an empty string. What am I missing?

      Referencing the file instead of putting it in the db would certainly optimize the db, however, for this application and our network configuration (there are a total of 4 servers involved...long story, don't ask), storing the images inside the db works better.

      --ksublondie
        What is the non-animated supposed to have?

        There is no way to tell if a gif87a or gif89a is animated by the header.(well maybe deep down in there). Your best bet is to use Image::Info or something similar to check the Image

        #!/usr/bin/perl -w use strict; use Image::Info qw(image_info); use Data::Dump; while (@ARGV) { print Data::Dump::dump(image_info(shift)), "\n"; }
        If you run animated gifs thru that you will get a parameter called GIF_Loop, that may be a way of detecting it. Some graphics module may have an is_animated method, but I don't know of one off hand.

        I'm not really a human, but I play one on earth Remember How Lucky You Are
        I spoke too soon. The hex conversion worked!!! However, some of the images are incomplete. I had changed a line above the hex conversion from my original that didn't work. MS sql must be automatically converting the raw data to hex when it's inserted to the db.

        --ksublondie