My favorites | Sign in
Project Home Downloads Source
Project Information
Members
Featured
Downloads
Links

A collection of media-oriented applications in Java, by me.

  • PDFZ - a simple binding for mupdf for Java.
  • ReaderZ - an experimental kobo touch e-ink e-reader application.
  • CSZ - a pre-alpha XHTML layout engine supporting CSS 2.1 in a streaming operation.
  • ImageZ - a pre-alpha project for a multi-layered bitmap editor. Still somewhat unfinished ...

News

30-3-12

Ok, so I had no luck after-all. The 1.0rc1 release of MuPDF just came out a few hours ago, and by chance I noticed it and had a couple of hours to kill. The API has changed a fair bit; mostly adding fz_context here and there, and making any of the big structures opaque.

The big change is the way the text device works: although it's a clearly superior API, it doesn't mesh well with the way I wrote the search code. Although i'm scanning all text spans as search input - and I probably don't get anything useful beyond the new 'block' abstraction as there's no guarantee of their order (think of matching a phrase that spans columns in a 2-column layout).
So, I've changed the code to the new api (untested, not commited yet), and started work on the search stuff: I think i have the trie stuff working but using the results it provides is now harder to use; so I need a clear head to think it through a bit more (not a: it's a warm Friday afternoon and there's no beer in the fridge kind of head).

4-3-12

I updated PDFZ to the latest revision of MuPDF. Only minor changes were required, and with any luck this will match the next released version.

13-2-12

And ... search too.

13-2-12

So I got the outline stuff working, i.e. table of contents.

I don't scroll to the exact location, but the page number is good enough for a printed book, so it should suffice here too.
I guess the next big thing is search ... and there's some code for that about, so it shouldn't be too difficult.

12-2-12

Tried to add the outline interfaces from mupdf to the PDFZ - but for some reason the object 'goes away' by the time I try to access it. Bad pointers that the JVM is hiding? No! Just a bad cut-n-paste-o which i've now fixed

I also ported some of the PDFView from ReaderZ to swing, and added that to PDFZ. Uses threads and whatnot, and renders on the fly. Makes for a nice and fast PDF viewer.
And I noticed the mupdf codebase is changing rapidly at the moment, I might wait for it to settle before updating: as it is it will definitely only work with a revision very close to the one specified in the README.
Last night I got in touch with the developers and found out a release is targeted for the end of the month, so I will sync up then.

4-2-12

A bit of a Saturday arvo one-man-hackfest and I added a basic epub reader to ReaderZ. As usual the blog has some more information and a shot of the screen.
2-2-12
Kept poking away at CSZ and added some support for floats and filled out some other bits of the implementation.

My blog has some more info and a screenshot. As it also states I'm back to work in a couple of weeks so will be pulling back on the time I spend on this for a while.

31-1-12

Although I'm not sure i'll get very far on it, I uploaded a new library - CSZ - which is a very unfinished shot at a XHTML layout engine. As usual, the README has some more info. CSZ is also Affero GPL 3.

This took a lot longer than i wanted to spend on it, but then again try reading the CSS specification. Well, I suppose 4 part-time days isn't that long: and a lot of that time was spent on property scaffolding.

27-1-12

Changed the backing buffer in ReaderZ to use greyscale 8-bit. Might make some operations a bit faster (not terribly noticeable so far though); but at least it will use less memory. Plus a few other tweaks and performance improvements to the pdf and image viewers.
27-1-12
Just checked in ReaderZ The README says a whole pile about it, and there's a bit more on my blog

It will also run on a desktop machine, wherein it simply uses a swing window to display a representation of the device screen.

24-1-12

And another year ...

I just checked in a new sub-project, "PDFZ", which is an interface for loading and rendering PDF pages. It is mostly just a JNI wrapper for mupdf with a small helper class. Note that this sub-project is using the GNU Affero General Public License.

4-12-11

Added a dual-tree-complex-wavelet de-noise and sharpen based on http://eeweb.poly.edu/iselesni/WaveletSoftware/
2-11-11
I think the last fix broke some other things too ... oh well, it's not like anybody else is using it.

I just checked in a DCT de-noising algorithm as I covered in the blog. Its fairly slow but works nicely for a few small tests I tried. Might not work for general images though.

8-10-11

Fixed a bug in the wiener deconvolution filter and made it multithreaded, and added an unsharp mask filter.
21-8-11
Managed to remove the piccolo2d dependencies, without losing any functionality. Also added a pretty cool 'show selection' overlay thing.

I thought it about time to upload a build too. It's definitely still alpha quality but it can be used for simple image manipulations, or just to laugh at!

20-8-11

Has it really been 2 weeks already? I implemented a crop tool. This uses a new tool overlay/handle mechanism I intend to use to replace the piccolo2d stuff i'm currently using elsewhere.

7-8-11

I implemented some basic OpenRaster support. Now multi-layer load/save works. Plus some tweaks to hide some of the details of undoable image manipulations.

ImageZ

This is just my hobby project to see if Java can be used to author a fairly complex desktop application - a multi-layer image editor.

Originally I intended it to sit somewhere between ImageJ and The Gimp in features - i.e. add the editing, drawing, and layer features missing from ImageJ, but add the image data format support and mathematical processing missing from The Gimp. Such a rather optimistic goal means it is very far from either.

Features

Taken from the README.

  • compound selections
    • rectangle or ellipse
    • boolean operators and/or/not
    • invert selection
    • editing of last object added
    • feathering
    • anti-aliasing
  • cut/copy/paste of layer content
    • uses system clipboard
    • able to create a new image from the clipboard
  • affine operations on layers
    • using a single tool for scale/rotate/shear
  • load of image formats supported by Java2D
    • nice load dialog with preview and meta-data view
  • save of png, jpeg images.
    • supports jpeg+alpha (non-standard use of 4-channel jpeg)
    • supports png 16 or 8 bit
    • nice save dialogues
    • images automatically flattened, alpha optional
    • able to save comments in both formats.
    • unlimited number of images open at once.
  • editable brush types
    • fill
    • shape
    • size
  • infinite undo/redo
    • limited only by memory size
    • uses compacted 'sparse layer' to store layer edits
  • zoom
    • 15 preset sizes
  • image operations
    • resize image
  • layer operations
    • add/remove layer
    • reorder layers
    • resize layer
    • explicit alpha channel in layer type
    • per layer opacity and blending mode
  • multiple layer types, independent of image
    • RGB, RGBA, Greyscale, Greyscale + alpha
    • 8 bit unsigned
    • 16 bit unsigned
    • 32-bit float
  • 'amiga' menus
    • menu is hidden until you press the menu button (right mouse button)
  • single-window-per-image interface
    • state is per-image
    • fixed-panel for most tools
    • internal frames for some other tools, controlled by function keys
  • screenshot capability
    • able to select individual window on linux
  • effects on layers
    • gaussian blur
    • brightness/contrast
    • wiener deconvolution (uses fft - broken at the moment)
  • utilises multiple cores if available
    • for effects
    • for blending (i.e. every edit/update)
    • significant performance benefits on modern hardware

Screenshots

As can be seen, I'm a hacker, not a painter.

Powered by Google Project Hosting