impulseadventure / jpegsnoop Goto Github PK
View Code? Open in Web Editor NEWJPEGsnoop: JPEG decoder and detailed analysis
Home Page: http://www.impulseadventure.com/photo/jpeg-snoop.html
License: GNU General Public License v2.0
JPEGsnoop: JPEG decoder and detailed analysis
Home Page: http://www.impulseadventure.com/photo/jpeg-snoop.html
License: GNU General Public License v2.0
So what is the algorithm for detecting different CLASSES like what should my metadata be for class2 or class3? Can you point me through the code?
This feature can be used to perform a lossless rotation test on JPEG images. Many people are unsure whether or not their software uses lossless rotation
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/21/
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/
Report the MotionJPEG quality statistics over time (DQT analysis).
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/30/
Scan parsing doesn't support progressive scan - disabled for now
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/18/
The most recent release on GitHub pops up a license window on first startup, showing a freeware-but-copyrighted license agreement. On GitHub itself, JPEGsnoop is stated to be under GPLv2. This seems to be a contradiction, and should be clarified.
[JPEGsnoop 1.5.2 - Win XP SP3]
First: many Thanks for this helpfull application.
I'd like JPEGsnoop remember it's settings for Window position and size, splitter settings too.
[2011/05/19] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/37/ by Anonymous
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/
Auto-size of preview zoom depending on image size
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/26/
Decode lossless JPEG files
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/24/
Decode 4-ch JPEGs (eg. CMYK, ARGB, etc.)
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/9/
Improve the logic that is used to review user-submitted compression signatures. Minimize manual effort & maintenance. Use peer-review / majority voting mechanism.
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/22/
Decode "Thumbs.db" files? Windows 2000 has different format?
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/8/
Add ability to download new signature database from the web repository
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/19/
Add Image dimensions in signature matching
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/20/
Closed as duplicate
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?
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/
Extract I-frames from MPEG2 video files
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/28/
I notice that it handles lots of raw image types, but NOT .ARW?
Please add
Detect and report color space. Alter color conversion process accordingly.
Version 1.7.0 has added detection of color space in APP14
marker, but changes to the color conversion process have not been made. Code assumes typical YCC.
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/5/
Useful for linear p-domain modeling
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/15/
Extend current table analysis to embedded thumbnails
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/12/
To improve responsiveness of UI, enable user to scroll through metadata while image decode is in progress.
Change scan image decode to background process using OnIdle instead
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/25/
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
Add default DHT & DQT for JPEG-B decode, similar to current use of m_abMJPGDHTSeg[]
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/6/
This JPEG, reportedly with a loop in the EXIF data, http://www.danalog.org/images/exif-loop.jpg makes JPEGsnoop completely unresponsive and hang/endless loop with high CPU usage - you have to manually kill the process via Task Manager. Occurs for both GUI and CLI usage.
This JPEG is referenced from this other GitHub issue in TwelveMonkeys: haraldk/TwelveMonkeys#477
Thanks.
Well, as the title says, could you add an option to save original Y, Cb, Cr channels to 3 separate RAW files (i.e. no header, just data) without any upsampling?
[2011/09/21] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/38/ by Anonymous
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()
.
Export in XYZ decoded according to sYCC (in TIFF), unclipped RGB values with 16b precision
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/10/
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
Thanks
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/)
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.
Would be awesome to have an abstracted dll which has the core functionality
[2010/11/03] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/31/ by Anonymous
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.
Finally, for the 001_huff
image which displays as corrupted in JPEGSnoop, here is how it should look like when decoded correctly:
Hi,
please port JPEGsnoop to GNU/Linux.
I'd like to have a multi-platform software; Qt libraries could be a good solution.
Thanks!
[2013/09/24] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/43/ by Stemby
Add capability: edit, display more, etc.
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/4/
Introduce ELA and other image content analysis methods.
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/14/
Compare and report any major deviation between embedded thumbnail and primary image. Can be useful in forensics.
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/13/
Ensure stream data is decoded correctly. Refer to Exif2-2.pdf pg 65+
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/3/
Introduce stego analysis features. For example, report anomalies with high-frequency coefficients / least-significant bits.
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/16/
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/
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.
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
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.
"Even more intuitive and detailed visualization of the huffman decoding: showing part of the stream as a continous stream of bits and marking them as they are recognized"
[2010/10/16] First created on https://sourceforge.net/p/jpegsnoop/feature-requests/11/
Help determine copy & paste forgeries, etc.
[2010-10-16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/7/
It is often desirable to remove the extensive metadata stored within JPEG files. Add a feature to export without certain marker segments.
[2010/10/16] First created at https://sourceforge.net/p/jpegsnoop/feature-requests/29/
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...
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.