Giter Club home page Giter Club logo

jpegsnoop's Introduction

JPEGsnoop v1.8.0

JPEGsnoop is a detailed JPEG image decoder and analysis tool. It reports all image metadata and can even help identify if an image has been edited.

Official repository for JPEGsnoop: JPEGsnoop @ GitHub

Documentation & Downloads

Features

  • Decode JPEG, AVI (MJPG), PSD images
  • MCU analysis with detailed decode
  • Extract embedded JPEG images
  • Detect edited images through compression signature analysis
  • Report all image metadata (EXIF)
  • Batch file processing
  • Compression signature detection
  • Recover corrupt JPEG image data
  • No installation required

Target System

  • Windows (MFC)
  • Compilation under Visual Studio (Visual C++)

License

  • JPEGsnoop is free for personal and commercial use per GNU General Public License version 2.0 (GPLv2)

Build

jpegsnoop's People

Contributors

alexeyneu avatar alggm avatar impulseadventure avatar vbaderks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jpegsnoop's Issues

ToF (time of flight) sensor data extraction

Hi, JPEGsnoop is a great tool and project. The reason for this new "issue" is rather an idea for a potential new feature.

I am planning on getting one of those new phones that have a ToF sensor. This might be used for background-blur (bokeh) effects; some phones even allow to ally this after the photo has been taken. I believe that this requires the depth information to be stored along with the image. This might be interesting to extract, for example to use for 3D modeling purpose... and I would just find it interesting.

Unfortunately, I don't have such a phone, yet (my old one still works), so that I don't have any example pictures. A device that has the post processing-bokeh is for example the Huawei P30 pro.

Best regards,
Martin.

Support for displaying 12-bit grayscale JPEG saved with Huffman or arithmetic coding

@ImpulseAdventure

Using JPEGSnoop 1.8.0 it is possible to examine files saved using IJG library compiled with JSAMPLE size of 12 bits.

Images compressed with Huffman coding can be shown, even though JPEGSnoop incorrectly defaults View -> Image Chan to RGB instead of Y. Sadly, the image display is corrupted -- it seems it is being decoded incorrectly.

However, 12-bit grayscale images compressed with arithmetic coding (which is now the default in IJG JPEG library v9) cannot be displayed at all.

I am attaching sample Huffman and arithmetic coded 12-bit gray JPEG images so you can take a look.

001_ac
001_huff

Finally, for the 001_huff image which displays as corrupted in JPEGSnoop, here is how it should look like when decoded correctly:

image

Support multiple scan images (single or dual component per scan)

Hello Calvin,
my problem is related to the one reported by travis, excepted that I wanted to use JPEGsnoop to show the advantage of splitting the different components in individual scans (or Y alone and Cb Cr together) when odd sizes are involved (MCUs need to be padded with dummy Y data units, separate scans do no require those which leads to smaller files).
Unfortunately JPEGsnoop does not decode the images correctly when a scan does not hold the 3 components.

Technically speaking these kind of JPEGs are still sequential ones, but they share some similarities with progressive ones (a decoder needs to keep entire scans in memory before it can produce actual RGB datas), could you please update JPEGsnoop to handle this type of files?

In this sample Cb & Cr are in the first scan, Y in the second, JPEGsnoop does not expect this, it shocks and displays garbage...

*** Marker: SOF0 (Baseline DCT) (xFFC0)
OFFSET: 0x0000009E
Frame header length = 17
Precision = 8
Number of Lines = 161
Samples per Line = 129
Image Size = 129 x 161
Raw Image Orientation = Portrait
Number of Img components = 3
Component[1]: ID=0x01, Samp Fac=0x22 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (Lum: Y)
Component[2]: ID=0x02, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cb)
Component[3]: ID=0x03, Samp Fac=0x11 (Subsamp 2 x 2), Quant Tbl Sel=0x01 (Chrom: Cr)

*** Marker: SOS (Start of Scan) (xFFDA)
OFFSET: 0x00000119
Scan header length = 10
Number of img components = 2
Component[1]: selector=0x02, table=1(DC),1(AC)
Component[2]: selector=0x03, table=1(DC),1(AC)
Spectral selection = 0 .. 63
Successive approximation = 0x00

*** Marker: SOS (Start of Scan) (xFFDA)
OFFSET: 0x000013F4
Scan header length = 8
Number of img components = 1
Component[1]: selector=0x01, table=0(DC),0(AC)
Spectral selection = 0 .. 63
Successive approximation = 0x00

I wanted to show that the large hidden part of the image shown here on an MCU based (3 components in a single scan) is smaller (and overall file size is smaller) when separate scans are used, but...

The image itself:

Archive with more material:
http://frdx.free.fr/ycc4calvin.zip

Regards

[2013/06/24] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/42/ by Frédéric Kayser

Totally MAD CD Rom: jpeg image not recognised

Hi,
I have been trying to decode a set of jpeg images but i have been having no luck at all.
The images in question are from the "Totally MAD CD Rom" which i bought years ago
I have managed to extract all the images (I think) from the CD Rom - but no jpeg viewer can open them - i can see the image files I have extracted have various markers, SOI, APP0, DQT and EOI (at the end) - so i think i have extracted them correctly. I have used your program and it identifies some of the same markers i do - but it also cannot understand the image.

I am a serious novice at jpeg decoding so i thought i would ask an expert if you can understand this image
madpicture 00010

Thanks

Checksum option

It would be very useful to have an option to generate a checksum of the images in JPEG files. Not the thumbnails, just the main image both to individual output and batch processing.

Whilst on its own a checksum is meaningless, it would be extremely useful for comparing multiple versions of the same image since matching checksums would guarantee any differences in the file (whether due intentional or unintentional changes) were in the metadata only.

[2013/02/13] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/41/ by Alan B

Rewrite User Interface

The user interface has evolved over time but is based on a very simple layout. Significant improvements can be made, including the removal of the splitter window and a more responsive scrolling system. Perhaps the metadata report can be presented in a hierarchical collapsible list manner.

[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/27/

Stop button

From ImpulseAdventure.com posting by Ray on 04/30/2011:

A stop button on the toolbar would be helpful. I have gotten the program into a couple of long projects that I regretted. Hate to close the program and lose whatever's already been done, just to keep it from doing more of it.

[2011/05/01] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/36/

Need help for ransomware

  • Hi Calvin Hass, I would like to thank you for this software is very useful to save my image files encrypted by stop ransomware, it can decode raw files from unedited digital cameras by Photoshop Software.
  • Ransomware encodes the first 150kb of image files, but files edited by the phototoshop software cannot be restored when pressing ctrl + 2, it shows the missing SOI Marker file.
  • Here is the process video:
    Test.zip

Canon IXUS/ELPH/IXY - Firmware version advice

I would have thought that fingerprinting may benefit from considering the firmware version of the camera.
For my Canon IXUS 220HS** this information is not presented

**aka "ELPH 3000" [usa] ... aka "IXY DIGITAL 410F" [japan]

EXIFTool by Phil Harvey : http://owl.phy.queensu.ca/~phil/exiftool/
...can be run as: exiftool IMG_1234.jpg -MakerNotes:FirmwareRevision
...which will return something like: Firmware Revision: 1.01 rev 4.00
...which means Canon Firmware v1.01d {rev1.00->a, rev2.00->b, ...}
As EXIFTool is written in PERL, this should be easy to implement
...or alternatively, do what the CHDK (Canon Hacker's Dev Kit) did with : http://chdk.wikia.com/wiki/CameraVersion
...and simply shell out to exifinfo

I have submitted a 'signature' for a single "fine" (resolution) image ...I can provide more data if requested

[2012/01/13] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/44/ by Blue Chip

RSTn marker not properly shown in detail scan decode

Hi, thanks for this awesome software!

When I decode an image with RSTn markers, it shows:

Lum (Tbl #0), MCU=[0,1]
[0x000068EC.7]: ZRL=[ 0] Val=[ -695] Coef=[00= DC] Data=[0x 75 FF D0 D5 = 0b (-------1 11111111 11010--- --------)]
                               ^^^^ <- CORRECT                                       ^ ^^^^^^^^ ^^^^^ <- WRONG!
[0x000068F0.6]: ZRL=[ 0] Val=[   -7] Coef=[01..01] Data=[0x 22 0A AA 0A = 0b (------10 0000---- -------- --------)]

The value decoded is right, but the bits on the right of DC coef are wrong. It should be something like:

Lum (Tbl #0), MCU=[0,1]
[0x000068EC.7]: RST0 Marker detected at 0x000068ED, skip 2 bytes, DC prediction reset to 0
[0x000068EF.0]: ZRL=[ 0] Val=[ -695] Coef=[00= DC] Data=[0x D5 22 0A AA = 0b (‭11010101 001000-- -------- --------)]
[0x000068F0.6]: ZRL=[ 0] Val=[   -7] Coef=[01..01] Data=[0x 22 0A AA 0A = 0b (------10 0000---- -------- --------)]

(1101 = DC code 0A, 0101001000 = -695)

Could you please investigate this?

Detailed MCU decode missing last row

Bug report submitted by Rory Hill via ImpulseAdventure website (#71150):


I may be mistaken, but it appears that the last row of a MCU RGB output in the detailed scan mode is omitted for either the end of row or due to a reset marker being encountered (not sure which). Here is an example:

MCU [149, 2]:
[ x635A51 x8D8A75 x6F705E x6F6D62 x9A9686 x908B79 x737367 x656A62 ]
[ x807C6C x8F8A76 x958B7D x8A7E72 x9D947F xA09C85 x918F82 x77796C ]
[ xBAAD99 xB2A893 xBBB1A3 xB0A698 x89826E x8E8677 xA19B8D x99957E ]
[ xA29286 x988A7B xAAA291 xB8B5A2 x9F9F8B x6F6A60 x736C65 xA49D87 ]
[ x999389 x72695E x665B53 x8F8A7A xAFAF99 xA3A598 x868682 x6B6B61 ]
[ xB7AA94 xC0BBAB x949490 x62625E x969283 xB3AD9F xBEBFB6 x959F93 ]
[ x968269 xB6AE95 xC3C5B8 x929290 x89847C x9F9789 xB6B4A7 xB9BEAC ]
MISSING ROW 8

I have reproduced the above issue with a standard image without the use of restart markers. It appears that only the last row of a RGB dump is missing when it refers to the last MCU column of an image.

Command line batch output to alternate directory

Feature request submitted by Bill via the ImpulseAdventure site on 2019/04/24:

Hi,
With the GUI, I'm able to batch process and specify an output log directory. How can I do this with the command line interface? All of the log files are being written to the same directory as the source files.
Thanks.

Good suggestion. I think it should be relatively straightforward to add support for a new command line option (in SnoopConfig) to specify the output directory, and then alter the operation defined in CJPEGsnoopApp::DoCmdLineCore().

JPEGsnoop does not understand part of a file?

I have two copies of a thumbnail for a Canon camera video. They are binary different but it seems that everything in the files that JPEGsnoop can decode is identical and I don't see anything in the decode output that covers the byte addresses that differ. I have "Maker Notes" decoding turned on but the section that is different is after the last of the maker notes data and before the actual image data from what I've been able to tell. I can upload the files if someone is willing to take a look at them.

Batch operation cancel dialog

The batch processing operation may be lengthy and there is no ability for the user to cancel the process.

I have already added the necessary code for a Progress dialog with cancel (OperationDlg), but it is only really suited for single-stepped algorithms, not recursion. The batchProcess() call is written with recursion to support descending into subdirectories.

[2010/11/14] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/34/

Support for multiple scans

If multiple components are defined in SOF, then the code expects the same number of components to be identified in the first SOS. Apparently, it is possible to have image components spread over multiple SOS (Scan) segments. The decoder currently assumes that all components should exist in the first scan, leading to table lookup issues and improper decode.

Reported by Alex on 05/05/2011 on http://www.impulseadventure.com/photo/jpeg-snoop.html

([2011-05-05] Imported from https://sourceforge.net/p/jpegsnoop/bugs/5/)

Portable configuration

Although the intention was to make JPEGsnoop portable, it currently writes the configuration and database into the following locations:

Configuration settings:
Registry: HKEY_CURRENT_USER\Software\ImpulseAdventure\JPEGsnoop

User Database:
C:\Documents and Settings\Owner\Application Data\JPEGsnoop\JPEGsnoop_db.dat

Instead, to make JPEGsnoop more portable, it should probably just write both into the application's directory.

[2010/11/06] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/32/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.