Photoshop DIFF Action

Followup to earlier post. I found some errors eventually, and have I think improved it some.

I have a bit of a fetish for “lossless editing”—working on a photo in such a way that I don’t change the initial set of bits that I imported. I think as you get more experienced it becomes less important; being sure you’ve got something the way you want it means you don’t care whether it’s easy to change later. But, for me, I edit incrementally, taking a while to see the flaws in older edits (especially when I’m editing a bunch of photos that will be displayed together), so it’s very useful to be able to very easily change my mind about things I’ve already done.

So, I use adjustment layers a lot, and adjustment layers with layer masks (which, I say again, are dodging and burning died and gone to heaven!), and then do a lot of pixel fixing writing onto a separate layer.

But there are a few tools, or a few situations maybe, when that’s not the best option. Keeping an entire clean copy of the base layer meets my criteria, but it kind of doubles the file size (layers that are mostly transparent compress pretty well, so my multi-layer files are mostly not that much larger than the base).

So, here’s what I do:

  1. Duplicate the base layer (shortcut: CTRL-j). My process expects the mode of this layer to be “normal”.
  2. Select this new layer
  3. Do the editing that has to be done in the context of all the pixels
  4. Usually, I keep this for a while, until I’ve printed or put the picture on the web or whatever the plan was
  5. Select your edit layer, and run my magic diff script. This deletes every pixel in the edit layer which is the same as is rendered by the stack of layers under it.

So, how does this version of the diff script work? I’m glad you asked!

Listing of diff action
The DIFF Action
  1. Set mode of edit layer to “difference”. This shows the differences between the current layer and the stack under it.
  2. Select all
  3. Copy Merged. This copies the full detailed differences.
  4. Select none
  5. Set mode of edit back to “normal” on this layer
  6. Create new pixel layer
  7. Paste (puts the differences here)
  8. Threshold, level=1. This reduces the difference map to black-and-white, with every unchanged pixel black and every changed pixel white.
  9. Select all
  10. Copy
  11. Delete layer (same one we created above, that was scratch workspace)
  12. (We are now on the original edit layer again)
  13. Set quick mask mode
  14. Paste
  15. Exit quick mask mode. The B&W change mask we made is now a selection.
  16. Add layer mask. The current selection will be put in as that mask. So now we have the edit layer, with a layer mask selecting only the changed pixels on this layer.
  17. Apply layer mask. This deletes all the pixels blocked by the layer mask, and then deletes the layer mask itself. Thus making this layer take a lot fewer bits to store!

Leave a Reply