Logan Shaw wrote: >[snip] >And there's also an easy way around it. Simply add noise to >the image. There are a number of techniques, but an obvious >one to use with GIF is to assign two palette entries to >two nearly (but not quite) identical colors. For example, >put 0xffffff and 0xfffeff in your palette. Then, for every >white pixel in the original image, choose at random whether it >gets represented by a 0xffffff or 0xfffeff pixel. There will >be virtually no discernable difference to the eye, but the >files will completely different, especially since GIF uses >LZW compression on the pixel data. > >There are similar methods for other formats: with JPEG, you >can just change the quality settings, causing the JPEG decoder >itself to add noise to your image. (And perfectly legit noise, >too, since the quality parameters vary on legit images.) > >And of course you can just add noise to the least significant >bit in any generic format as well. > > - Logan > >
If I could revisit this issue and be less sinister in doing so, I'm trying to look at ways to generate a fingerprint from GIF stock spams that could be used to filter them. I'll need to reduce a large number of spam (no, I don't need any extra, so don't bother forwarding them ;-)... and then do a stochastic analysis of those parameters. In the meantime, a couple of questions and observations... First, CPAN seems to come up short on modules to parse and decompose (and render!) GIF or PNG file formats. Most disappointing. I finally decided on the now stagnant and unsupported Image::Info module (sigh), but it doesn't decompress that data once it deconstructs the GIF data stream into its component parts. I tried to use Compress::LZW to decompress the stream, but that only seems to work on 12 or 16 bit minimum codesize, whereas GIF images are routinely 4, 6, or 8 bits long. Does anyone have a handle on what Perl modules to use for dissecting GIF objects? Thanks, -Philip