Return to Digital Photography Articles
JPEGsnoop - Source Code
JPEGsnoop is released as Open Source!
Return to JPEGsnoop Main Page
JPEGsnoop is now Open Source on GitHub!
I'm happy to announce that I have now released JPEGsnoop source code to the open source community. I am hoping that this will enable others to add value in the project in new ways, in addition to helping those who are learning to write their own JPEG decoders
After researching many of the options pertaining to how the source code was released, here are the details:
- Source code has now been moved to GitHub as of v1.8.0 (previously sourceforge)
- Source code repository via Git for revision control
- License agreement is GPL v2 (although I may consider LGPL if sufficient interest)
- JPEGsnoop Source Code repository on GitHub
NOTE: Source code for version 1.8.0 has now been posted - JPEGsnoop Feature Requests and Bug Reports
- Please contribute to the project!
Considerations for Open Source

After analyzing digital images for years and developing JPEGsnoop in my spare time, I decided to explore the possibility of releasing the source code to the Open Source community for further development. I was looking to my readers to provide their input in how to best approach this transition.
There are many wonderful application developers out there who are more than capable of improving upon the features and user interface, and I'd like to give everyone the opportunity.
The Source Code
- JPEGsnoop is written in Visual C++
- JPEGsnoop uses Windows MFC framework
- No 3rd party libraries are required: All image decode/display, EXIF decode, etc. are written independently.
- An extensive database of camera signatures is also included with the source code.
Are you interested in improving JPEGsnoop?
Please let me know if you are a programmer with ideas that you'd like to roll into future releases of JPEGsnoop.
Porting JPEGsnoop to Mac and/or LINUX
Quite frequently, I have been receiving requests to port JPEGsnoop to other operating systems. In most cases, the User Interface code has been reasonably well separated from the primary analysis code, so a port should be relatively easy.
Reader's Comments:
Please leave your comments or suggestions below!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.
In my previous submission, I realized I have made a mistake in the output format.
For image of say 256*460 image, i need it to output 64 matrices of (256/8) by ((460+4)/8) which is equivalent to 32*58 output. Hence 32*58 for DC component, 32*58 for first AC[1], 32*58 for second AC[2], etc.
The output size should varies based on the dimension of the input image.
Thank you.
Is this software able to extract out all of DC[1] and AC[63] components of an image and output it into an 8 by 8 matrix for each individual DC and AC component separately?
If not, how can I implement it myself?
Thank you for your effort, is an amazing work you've done there.
I am Jincy Fernandez , doing research. I would like to know how the compressed bits of jpeg converted to MCU.
Why does same MCU for Y repeat so many times? What is Tb1? What are the binary digits and dashes in the bracket? Why does EOB occur at end of each line. I have many questions about this. Is there detailed user guide on this program?
I add cameras to the local database but I always get the same message: "Appears to be new signature for known camera.
If the camera/software doesn't appear in list above,
PLEASE ADD TO DATABASE with [Tools->Add Camera to DB]"
The added cameras do appear in the list above but with a *?? where "CAM" should be and a blank where "Yes" under Subsamp Match?. How can I get the local DB to be accepted correctly?
Thanks,
E
UPDATE: The source code for v1.7.5 is now uploaded to the SVN!
http://www.forensicfocus.com/Forums/viewtopic/t=12127/
starting form here:
http://www.forensicfocus.com/Forums/viewtopic/p=6575159/#6575159
As a side note the tool does not run on XP (but all is needed is to change the OS version and subsystem from 6 to 5 in the PE header and it works nicely).
It is a known issue with a number of programs compiled with latish releases of MS compilers that "removed" support for XP.
jaclaz
Regarding the Win XP operation, yes, the new compiler I was using for v1.7.0 initially stopped targeting for WinXP. This issue was fixed in release v1.7.3 (available now).
Is there a 64bit version of the exe? I get memory issues with some really big sat images.
What is the status of adding the capability to fix corrupted jpegs? Right now I can view my jpeg thumbnails, but most of the actual pictures when I open are grey or they look like they got smooshed together with grey around them.
Thanks!
Faststone can create Jpgs with different color spaces than YCbCr, like RGB or YCbCrK. I don't know if a RGB-Jpg is still standard, at least all other programs I checked so far can display it correctly.
*** Marker: SOF2 (Progressive DCT) (xFFC2) ***
Number of Img components = 3
Component[1]: ID=0x52, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (?]
Component[2]: ID=0x47, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (?]
Component[3]: ID=0x42, Samp Fac=0x11 (Subsamp 1 x 1), Quant Tbl Sel=0x00 (?]
What I would need to decide is: how to provide access (web rendered output, signature file format or DB queries), how to manage server load, and what filtering should be done (if any). If anyone has any ideas, please let me know. Just producing a "JPEGsnoop_db.dat" file to download wouldn't work since it wouldn't have undergone any filtering.
If I create a new file and rename it (changing the extension) and then make changes with paint, the final image does not recognize in JPEGsnoop.
"JPEGsnoop 1.5.2 by Calvin Hass
http://www.impulseadventure.com/photo/
-------------------------------------
Filename: [C: / Users / Antonio / Desktop / $ RUDWR80.jpg]
Filesize: [1414710] Bytes
Start Offset: 0x00000000
NOTE: File with JPEG markers did not start. Consider using [Tools-> Img Search Fwd] to locate embedded JPEG. "
2. You're not supposed to commit executable files to source control (Release/JPEGsnoop.exe). The common practice is to tell SVN to ignore 'Release' and 'Debug' folders (if you're using TortoiseSVN, right click on those folders, TSVN -> add to ignore list -> the name of the folder). You can also do this for other auto-generated files such as *.ncb etc.
Thanks!
UPDATE: I have now corrected the repository to remove binaries.
Sometimes I need advanced parsing visualization and picture pixels zoom. This capabilities could be added in future by enthusiasts, probably I'll do it.
I believe, that port to Linux is required as well.
I would advise to merge Image debugger to JPEGSnoop
http://www.billbaxter.com/projects/imdebug/
As far as it is built with wxWidgets - it could be a choice of graphic library to use.
See you in repository ;)
JPEGSnoop is pretty good as it is, but I would definitly add some features here and there as I need them when you release it to open source. I might e.g. think about adding support for progressive JPEGs. I would prefer LGPL because it might give the code a broader user base, but GPL would also be fine. I would prefer sourceforge because it is not commercial like google, but I don't have a strong opinion on this either.
Best regards,
Michael
Somebody highlight me this wikipedia entry (it may help you) :
http://en.wikipedia.org/wiki/Comparison_of_open_source_software_hosting_facilities
Great news, releasing such software is great for people trying to understand jpeg standard as i am at the moment :)
License and depot host site depend of what you want to do now!
If you still want to manage yourself patch, bug and keep source a depot impulseadventure is the best solution. But you will have to install yourself all the web stuff, and you will probably never want to share this management with someone else that you probably will never meet.
If you want at the end that somebody else handle all this software life. Depot on remote server is probably the best. They provide bugzilla database for bug tracking and feature request, mailing list services, forum ... You are free to use it. There is some permission management too this allow to share project management : commit, release, forum moderation ...
Which of google code, sourceforge, freahmeat ... Well ...
Google "Don't be evil" (http://en.wikipedia.org/wiki/Don%27t_be_evil) Some people think they are ...
Sourceforge i read a day the same about them.
Once you publish your code the only thing that protect you and your work is the licence.
If you don't care about what people will do with it, BSD licence is great. Eventually somebody will make money with it :)
If you choose a more restrictive licence (ie GPL ), you force people who use your work to share with the community their personnal work.
So it really depend of which project future you want to go.
I am inclined to migrate the hosting off-site (eg. to sourceforge) so that I can leverage the bugzilla, CVS, support forums and greater visibility. I don't have any problem with others taking control over the direction of the program, though I am still keen to keep involved in the development & ideas for the future.
Regarding the licensing, my personal preference is to help increase the sharing & learning with others, which seems more in line with a GPL-type license. I will need to spend some time looking at this in greater detail, but that's the direction I'm currently leaning.
If you want to enforce a future of opensource, then GPL2 is probably a good choice and is pretty well known and understood by now.
If you want to make it as free as possible for the world to use (including closed-source projects), while retaining acknowledgment of its origins, then the BSD lic. works.
Personally I would *not* go with the GPL3 lic. as it gets into political motivations that are, IMO, quite at odds with the whole philosophy of shared source.
I'd be glad to see it happen as one of my small ongoing fears is that source will be lost forever for unique programs (it has happened before), which are then frozen in time. So thank you for considering this method of assuring JpegSnoop's ongoing future.
NOTE: Image repair requests are not accepted. Thanks for your understanding.