Copy link to clipboard
Copied
Hello,
Is there anyone familiar with the object model well enough to be able to help me with the following easily:
I need to go through all the placed images in the activeDocument. If the image is a Photoshop document in bitmap mode (1-bit mode), it needs to have it's Fill set to overprint (UI would be: Attributes Palette>Overprint Fill).
Any help would be much appreciated.
Thank you,
Ariel
Copy link to clipboard
Copied
okay, here's where I am now:
mydoc= app.activeDocument.allGraphics[0].imageTypeName
This returns "Photoshop" if it's a Photoshop placed image. But, how do I figure out if it's in bitmap mode?
Copy link to clipboard
Copied
As this is urgent for me, I'm posting my slow progress, but if anyone can speed things up for me it really would be soo helpful!
okay, in the UI Info palette there is an entry called: Color Space. If the image is bitmap, this shows "Black and White". How do I access this in the object model? Color Space does not seem to be a property of graphic.
Copy link to clipboard
Copied
Hi Ariel,
I don't see a way within the DOM to find the color space of a placed
image. The only two ways I can think of off-hand is to have Photoshop
do that for you, or to parse the image file.
You might be able to figure it out with an educated guess based on the
file name (i.e. tif or jpeg, etc.) and file size as well.
Harbs
http://www.in-tools.com
Innovations in Automation
Copy link to clipboard
Copied
Hi Harbs,
Thanks for the reply.
I also haven't been able to find anything. But, I think that only bitmap
(1-bit) images have the property overprintFill.
Now I'm having a simpler problem of testing with a given image has that
property.
Using hasOwnProperty("overprintFill") always returns true. But trying to
read that property results in an error.
I've tried this, and it's not working:
mygraphics = app.activeDocument.allGraphics;
for (aa=0; aa<mygraphics.length; aa++){
if (mygraphics[aa].imageTypeName == "Photoshop"){
try{
alert (aa + mygraphics[aa].overprintFill);
mygraphics[aa].overprintFill;
mygraphics[aa].select();
exit();}
catch(e){};
}
}
Any ideas gratefully accepted.
Ariel
(And I hope you've got a lightning protector on your computer
Copy link to clipboard
Copied
Well, this seems to work, setting all placed Photoshop bitmaps to overprint. Provided I'm correct that only bitmap have an overprintFill attribute:
mygraphics = app.activeDocument.allGraphics;
for (aa=0; aa<mygraphics.length; aa++){
if (mygraphics[aa].imageTypeName == "Photoshop"){
try{
mygraphics[aa].overprintFill = true;
alert("Page: " + mygraphics[aa].parent.parent.name + " | Name: " + mygraphics[aa].itemLink.name);
}
catch(e){};
}
}
If anyone has any comments, I'd love to hear.
Thanks,
Ariel
Copy link to clipboard
Copied
Makes sense. They all have an overprint property, but you would only
be able to set the overprint property on a bitmap (as in the UI).
Harbs
Copy link to clipboard
Copied
Yes. But the only problem is that I'm not sure if bitmaps are the only
Photoshop graphics that have that property settable. In my case, I anyway
only have bitmpas and CMYK, so that's okay (I hope). But this script could
be doing unwanted things. I still wonder where InDesign gets it's "color
mode" information from (as displayed in the Info palette), and why it's not
accessible to scripting. I think it should be, no?
Copy link to clipboard
Copied
Ariel,
you can apply "overprint" to grayscale images as well.
Uwe
Copy link to clipboard
Copied
Oho! So can you think of anything which distinguishes a bitmap so I can
figure out with a script if the image is a bitmap?
Copy link to clipboard
Copied
Hi, Ariel!
Try something like this (a bitmap TIFF image is selected):
if (app.selection[0].allGraphics[0].properties.toSource().match(/space:"Schwarzweiß"/g)=="space:\"Schwarzweiß\""){
app.selection[0].fillColor="Yellow";
};
Since I'm working with an german version of InDesign the space-property for an bitmap TIFF image is "Schwarzweiß". So figure out what the ESTK exactly tells you when you check with the properties.toSource()-method. It might be: match(/space:"bitmap"/g) which translates to:
if (app.selection[0].allGraphics[0].properties.toSource().match(/space:"bitmap"/g)=="space:\"bitmap\""){
app.selection[0].fillColor="Yellow";
};
Uwe
Copy link to clipboard
Copied
Of course you need something like this:
if (app.selection[0].allGraphics[0].properties.toSource().match(/space:"Schwarzweiß"/g)=="space:\"Schwarzweiß\""){
app.selection[0].allGraphics[0].overprintFill=true; };
The fillColor="Yellow" was for testing only.
Uwe
Copy link to clipboard
Copied
Very good! In English it's: space:"Black and White"
Thanks for introducing me to the method toSource!
Ariel
Copy link to clipboard
Copied
You might want to add another if-statement:
if(app.selection[0].allGraphics[0].fillColor.name == "Black")
Because you can colorize a bitmap TIFF to any color of your swatches panel, it would be unfortunate to overprint a color like "Yellow" to a background color like "Cyan". The output you'll get would be a green. Imagine your overprinting bitmap TIFF overlaps different colors the effect might not what you want at all.
Uwe
Copy link to clipboard
Copied
Oh, don't thank me for introducing you to the toSource()-method. Your thanks must go to Dirk Becker who introduced me to that method.
Uwe
Copy link to clipboard
Copied
in VB I'm doing something like this:
If UCase$(myImgContainer.AllGraphics.Item(1).Space) = "RGB" Or _
UCase$(myImgContainer.AllGraphics.Item(1).Space) = "CMYK" Or _
UCase$(myImgContainer.AllGraphics.Item(1).Space) = "LAB" Or _
UCase$(Right(myImgContainer.AllGraphics.Item(1).Space, 4)) = "TONE" Then
' color
else
' Gray / BW
end if
and if you want to check if your image is image or vector:
If myImgContainer.AllGraphics.Item(1).ActualPpi(0) = 0 Then
' not vector
end if
robin
www.adobescripts.co.uk
Copy link to clipboard
Copied
At least when they are TIFF images.
Uwe
Copy link to clipboard
Copied
Well, they're not. OTH, in this project there aren't any greyscale images
either.