How to decode JPEG pictures for hidden information

We often see pictures online and wonder if this picture is Photoshopped; one way to determine if the image is Photoshopped or not is using gut feelings but have every search for software that decodes the JPEG and give you the source code. How can you make sure that the photo has not been processed or modified in any software?

JPEGsnoop is a free photo authenticity detection software that can read various coded information to help you determine the pictures have not been edited or modified by software. 

When you encounter a suspicious photo, you can use it, and it will decode the image and spit out all the information about the picture. This software not only supports standard JPG format but also supports embedded photos in PDF, AVI, MOV, and other documents.

JPEGsnoop is very simple to use. Install the software and ready to go. On the first run, you have to agree with the terms and then click the menu “File” -> “Open image” open the picture you want to decode. 

Just drag and drop images directly into the software. It will automatically read the information on the picture. It will decode the picture and show all the info in the top frame. 

If you see the text, such as SW: [Adobe PhotoShop] or SW: [XnView], etc., it means the picture is likely to be PhotoShopped or modified in XnView. Besides, you can also see various other information, such as CAM information, camera model, location, date, etc. 

All this information is saved in the photo signature at the time when the picture is taken. All this information can be altered using any Hex editor that can be retrieved using this software.

Now the best part is JPEGsnoop is entirely free with green free installation. You can download the JPEG decoder from its original website and support the Windows 8 system.

Here is a c++ code that decodes the picture and retrieves the information.

This example shows how to decode a JPEG image using a JpegBitmapDecoder from a FileStream .

Stream imageSource ^ = gcnew FileStream ( "myPicture.jpg" , FileMode :: Open, FileAccess :: Read, FileShare :: Read); 
^ JpegBitmapDecoder ImageDecoder = gcnew JpegBitmapDecoder (imageSource, BitmapCreateOptions :: PreservePixelFormat, BitmapCacheOption :: Default);
^ BitmapSource BitmapSource = imageDecoder-> Frames [0]; 
Image mypicture = ^ gcnew Image (); 
mypicture-> Source = BitmapSource; 
mypicture-> Stretch = Stretch :: None; 
mypicture-> Margin = System :: Windows :: Thickness (20);

This example shows how to encode a BitmapSource into a JPEG image using a JpegBitmapEncoder .

int width = 256, 
int height = 256, 
int stride = width / 8; 
array pixels ^ = gcnew array (height * stride); 
BitmapPalette palette ^ = BitmapPalettes :: Halftone256; 
// Creates a new empty image with the pre-defined palette. 
BitmapSource BitmapSource image = ^ :: Create ( 
    width, height, 
    96, 96, 
   PixelFormats :: Indexed1, 
   palette, 
   pixels, 
  stride); 
System :: IO :: FileStream ^ stream = gcnew System :: IO :: FileStream ( "picture.jpg" , FileMode :: Create); 
^ JpegBitmapEncoder pictureEncoder = gcnew JpegBitmapEncoder ();
TextBlock myTextBlock ^ = gcnew System :: Windows :: Controls ::TextBlock (); 
myTextBlock-> Text = "Codec Author is:" + pictureEncoder-> CodecInfo-> Author-> ToString (); 
pictureEncoder-> FlipHorizontal = true ; 
pictureEncoder-> FlipVertical = false ; 
pictureEncoder-> QualityLevel = 50; 
pictureEncoder-> Rotation = Rotation :: Rotate90; 
pictureEncoder-> Frames-> Add (BitmapFrame :: Create (image)); 
pictureEncoder-> Save (stream);
Scroll to Top