Jump to content

guspaz

Newbies
  • Posts

    9
  • Joined

  • Last visited

Posts posted by guspaz

  1. SP2 isn't even supported by Microsoft anymore. I announced I'd be doing this months ago on my blog, so no one should really have any claim to surprise.

    I didn't realize that reading your blog was a requirement for using Paint.NET, although I do periodically try to go through it every few months.

    SP2 is still supported by Microsoft, and will be through 13-Jul-2010. Hopefully my IT department won't leave us high and dry after that date... There's rumours that we might get Win7, which would be nice...

    And given the amount of bandwidth I'm chewing through with Paint.NET, it is worth it. Go talk to your IT admin and have them install SP3, or ask them to let you install it yourself. It's been out for 2 years already -- I refuse to be the one paying for your outdated IT policy when I'm giving this away for free.

    A junior developer doesn't get to tell the IT department what updates to install, so I end up being the one paying. I do understand your reasons, but that doesn't really help me :P

    As for your bandwidth requirements, have you thought about setting up a mirror system so that others can donate bandwidth?

  2. While I haven't taken a look at this particular plugin, from looking at the original plugin when it was first released it would seem to me that it should be very simple to more effectively hide (from a visual perspective) whatever you're trying to hide.

    Boltbait's plugin suffered from users being able to occasionally see the "hidden" image without decoding it. This was because it was something of a simple overlay.

    I'm assuming that you're doing this by replacing the n least significant bits of a channel (I'd avoid the alpha channel entirely if I were you) with your data.

    One simple way to obfuscate any apparent patterns in your input (be it an image, where it may be extremely visible, or text where a repeating pattern might become apparent) is to just do a bitwise XOR on your input (the "^" operator in C#, I believe) with some random data.

    So, pick a seed (hardcode it, we're looking for visual masking, not security), seed the random number generator with it, start generating random numbers, and xor your input with it. This will turn your output into an apparently completely random series of bits, destroying any patterns that might be present. It would appear as a very light noise in the image rather than a possibly identifiable pattern. I've been tempted for a while to modify Boltbait's original plugin to do this, but never got around to it.

    Another idea was to apply some simple compression (gzip, perhaps) to allow the input to be potentially larger than the available space, but this introduces additional UI complications.

  3. CommanderSozo's looks REALLY nice as a 48x48 icon, which I'm pretty sure is the default icon size these days. It is in Vista, anyhow. Yeah, stretched into a square, because aspect ratio doesn't matter in this image at that size.

    Here, take a look... Tried to remove the existing text (too small) and replace it with something still readable after resizing. Horribly done (by me, that is), but gives an idea of what an icon might look like:

    cz_icon.png

    Imagine if CommanderSozo took a crack and doing a PROPER icon with his source file ;)

    For the curious, here are the unmodified (but still pre-cropped) images at 48x48, and just 48 height:

    cz_icon_unmodified_square.png

    cz_icon_unmodified.png

    I'm just loving this as an icon...

  4. I realize that this thread is almost a month old, but it's still on the first page, so hopefully that's considered recent enough ;)

    I've got two solutions that would both help towards making the encoded image perceptually invisible

    For example, say you want to encode a 1-bit image into a 24-bit image. You're commandeering, I imagine, the least significant 3 bits (one per channel) in each pixel.

    First, for a 1-bit source image, you should get three hidden pixels per one real pixel. If we're only encoding a 1-bit image, might as well take advantage of all the available bits. This also means that the hidden image can be up to three times larger (in number of pixels) than the final image.

    The second suggestion, and this is the most effective part, is to apply a compression algorithm to the image you're hiding (.NET directly supports several compression systems already). Compressed files look a lot like random bits. This is because a good compression algorithm produces data that has few patterns. Because patterns are compressible, that'd mean that the compression algorithm wasn't doing a good job.

    Just to sum that up, when you compress data, the output looks random. So if you take a 1-bit image, compress it using something fairly simple (deflate, for example), and THEN overlay the compressed data (one bit at a time) over the final image, the overlay will look random. There won't be any pattern, and slight random variations in pixels are pretty much invisible to the human eye!

    The other benefit, of course, is that since we're taking a 1-bit image, encoding 3 bits per pixel, and compressing it, you can either fit significantly larger images in, or work in redundancy to survive lossy compression. Or you could just repeat the data to get a uniform random jitter on all pixels.

    EDIT: Here's an image with a 1-bit random image (OK, semi-random, it was the PDN Cloud plugin with minimum size, and then a threshold applied, it looks random enough). it gets added as just slight noise being added to the photo, no chance to see it on top of a photograph:

    endeavour_stegged.png

    Except that slight random noise could be holding an actual image once you extract and decompress it.

  5. How about non-custom but user-controlled palette?

    Photoshop lets you select how many colours will be in the palette, if you don't want 256.

    For example, maybe I'm saving a GIF image and I'm really trying to minimize filesize. Saving it as a 16-colour image goes a long way, or some other colour count.

    I understand that you're probably constrained by the .NET's GIF-saving routines, but surely the .NET framework lets you set how many colours are in the GIF palette?

×
×
  • Create New...