Introduction
You have a bunch of pictures, but they don't look that great. You'd like to increase contrast, or improve colors. Luckily, you have Adobe Photoshop CS2 with its wonderful Auto Contrast function. No problem if it's all about tens of pictures. What if there are hundreds, or even thousands? Open every picture in Photoshop, apply adjustments, save it... Oh, it is boring. Why not just automate all these tasks and let Photoshop work hard while we are lying on the beach?
Using the code
Let's do it in eight easy steps:
- Create a Windows Application project.
- Add a reference to the Photoshop Object Library.
- To use the
Photoshop
object in our application, import the Photoshop
namespace: Imports Photoshop
- Declare the two objects we are going to work with (the Photoshop
Application
object and the Photoshop Document
object): Dim appRef As Photoshop.Application
Dim currentDoc As Photoshop.Document
- Now, we should define the folder containing our pictures and the folder for the improved pictures. Add two
FolderBrowseDialog
controls (input and output folders can be the same, the pictures will just be overwritten; however, it is not always such a good idea). Also, add the necessary TextBox
es and Button
controls.
Add Button
controls to start the process and to finish the application.
- Open the Photoshop application when our form is loading. Set Photoshop as invisible (we still see it when it is starting, though).
appRef = New ApplicationClass
appRef.Visible = False
appRef.DisplayDialogs = PsDialogModes.psDisplayNoDialogs
appRef.PlaybackDisplayDialogs = PsDialogModes.psDisplayNoDialogs
- On the application exit event, don't forget to quit Photoshop as well.
appRef.Quit()
- Finally, the last step - process every image in the folder.
Dim files() As String = IO.Directory.GetFiles(txtFrom.Text, "*.jpg")
For Each fl As String In files
currentDoc = appRef.Open(fl)
Dim currentLayer As Photoshop.ArtLayer = _
CType(currentDoc.ActiveLayer, Photoshop.ArtLayer)
currentLayer.AutoContrast()
Dim jpeg As New Photoshop.JPEGSaveOptions
jpeg.Quality = 8
currentDoc.SaveAs(txtTo.Text + _
IO.Path.GetFileName(fl), jpeg, False, 2)
currentDoc.Close()
Next
Enjoy your life, and when you are back, you will find all your pictures just perfect.
Points of interest
We applied only one Auto Contrast adjustment feature. Sure there is zillion possibilities in Photoshop to improve the image we could use in our application. Just do a research of the Photoshop Document
object.
Photoshop has a feature called batch processing. It could be extremely useful in our automation process. However, for some unknown reason, I could not make it work.