Save for web by calling Export (exportDocument) from C# possible?
I'm trying to call the Export function from C# and I'm having trouble to supply a valid file object.
I picked up the old COM FileSystemObject, and tried (since that was used to work in VB6 and VBScript).
In C# I have not yet got it to work. Any ideas?
I have a piece of code making use of ExecuteAction to run a number of hardly understandable lines of code, executing Save For Web, for an image.
I'm now trying to rewrite it to call the Export method of the document instead, since that would be so much easier to follow).
This is my current test code
// Using the export function (instead of hard-to-understand-output-script)
private void SaveJpegForWebUsingExport(dynamic docRef, string filePath, int percentage)
{
// Begin with deleting the destination image if it already existed on disk.
if (System.IO.File.Exists(filePath))
{
System.IO.File.Delete(filePath);
}
dynamic options = Activator.CreateInstance(Type.GetTypeFromProgID("Photoshop.ExportOptionsSaveForWeb"));
options.quality = percentage;
options.format = 6; // JPEG = 6 (enl Object Model Viewe i Extenscript Toolkit) .Type.GetTypeFromProgID("SaveDocumentType.JPEG"); // Save Format for the file
// Create an empty file, to be able to referr to it using filesystemobject (is this really needed?)
var myFileEmpty = System.IO.File.Open(filePath,System.IO.FileMode.CreateNew);
myFileEmpty.Close();
var fs = new IWshRuntimeLibrary.FileSystemObject();
var myFile = fs.GetFile(filePath);
// ExportType.SAVEFORWEB = 2 (according to Object Model Viewe in Extenscript Toolkit)
docRef.Export(myFile, 2, options);
//docRef.Export(myFile.ParentFolder, 2, options);
}
This is the error I get, so obviously the File (I tested with folder as well) object is not recognized as a valid type by Photoshop:
Error processing test1.eps: System.Runtime.InteropServices.COMException (0x80040
4DA): Illegal argument - argument 1
- File/Folder expected
at System.Dynamic.ComRuntimeHelpers.CheckThrowException(Int32 hresult, ExcepI
nfo& excepInfo, UInt32 argErr, String message)
at CallSite.Target(Closure , CallSite , ComObject , Folder , Int32 , Object )
Thanks,
Andreas