Photoshop script to get the color of a solid fill layer? - scripting

I'm trying to write a Photoshop jsx script for extracting color values from a PSD template. The colors are defined as separate fill layers that I'd like to be able to loop through and create a hash of {layer_name: #hex_color} values. I'm not finding any documentation on reading the color value of the fill layer.

I found my answer on this thread.

Related

Which sequence of PDF operators are needed to set the background color of Tf and TF contents?

I need to manipulate the content streams of a page in such a way that if the contents of Tf of one of the elements of TF matches specific values the background area of those squares/glyphs needs to change.
I think that I would need save the graphics state, after creating two different string objects, then apply a fill operator then restore the graphics state.
My question is: would the fill operator recognize the area of the matched string and fill just this?
Second: would I need to repeat this sequence for each element of the TF array?
It's not quite that simple.
You have to determine the position of the text yourself (by keeping track of the current transformation matrix for the whole page content stream and the text matrix for the text object in which your text in question is drawn) and then insert a path outlining that area and filling it just before the text object in question.
But this in particular means that it is not necessary to split the strings of the text drawing instructions to have the search text be drawn by itself.
By the way, if this change of background is meant to represent something like a text marker marking, an alternative to changing the page content would be to create text markup annotations for the determined coordinates. That way you would merely have to parse the page content stream for the coordinates, you don't have to change it. In particular if the text drawing instructions may also be in some form Xobject referenced from the page content instead of the page content itself, this may simplify the code.

Image recolour in Excel

I have a greyscale image with some transparent sections too. I would like to recolour this within excel (based on the value that a user types in a cell or something)
Manually, all I need to do is select the picture then in the ribbon πŸ‘’ format πŸ‘’ colour πŸ‘’ more variations πŸ‘’ more colours and select appropriately. I've tried the macro recorder on these steps but get nothing useful.
Searching the web has led me to believe that the Shape.PictureFormat.Recolor method, which I'm guessing is what I want, is only availible in Publisher. I'd rather not interface with thatfor portability reasons (in case publisher isn't installed), and I'd also like this to run as speedily as possible.
I've even considered converting the image to an array of bytes, performing the required pixel manipulations then converting back to an image, but I think that'll be slow. I also don't have a clue how.
Is there a method in VBA to recolour an image in this way, leaving alpha as it is? Perhaps with the use of an ActiveX image control? Here's an example image in case it's not clear
White πŸ‘’ Green
Black πŸ‘’ Black
Alpha πŸ‘’ Alpha
If you can't find a pure object model based solution, you can try to modify the document xml. It is not the easiest of solutions, but it is far easier than pixel manipulation.
Do like this:
Save your workbook without modification
Do the color change
Save the file again, with a different file name
Unzip the two *.xlsx files you created
Analyze the differences. You'll most likely find it in the drawings folder
Recreate the changes in the xml of the second file in the first one and zip it back together. If that works, you now have a theoretical way to the solution.
If you get this to work, you can automate these steps.

Split colors into layers in photoshop

I have scanned images with alpha channel that I need to compress. The images are drawings. Unfortunately their creation process creates random variation in color that compress poorly in PNG or even cause negative compression.
If I run filters over the data, I wipe out the text.
If I could split out all the pixels that are approximately a specific color into a separate layer, I could run filters without affecting the text.
There are four distinct colors I would like to split out.
The source image is indexed so there are not a lot of variation that needs to be split out.
Is this possible in Photoshop? If so, how?
-=-=-=-
I have not seen the format for a human readable color table. That would make things a lot easier. I have created some within photoshop and it is a PITA.
I was thinking about doing this manually at first then possibly automating it.
I have tried the magic want toll but I cannot get it to distinguish colors well. For example, I have purples and black. To get the thing to select all the purples, it grabs the blacks as well.
You can Scan image with Photoshop File > Import > WIA Support select your printer/Scanner and then scan your picture its come in actual color which you want and then you can compress its not distort your color
The best thing I could come up with was MAGIC WAND and disable the continuous setting.
Cut and Paste Special to a new layer.
I would preferred to select Polygon lasso or Magnetic lasso tool to select specific area.
Otherwise you select the command Select | Color Range and Select color with eyedropper tool
Best way to select all of a certain colour is to go to Select>Color Range
then select white with the eyedropper tool, this way it selects everything with the white value more accurately than manually with he magic tool, it gets all the little things you may miss. then use that to cut/paste into a new layer with ctrl+shift+v to put paste it in place :)

Creating text mosaic in Actionscript

Does anyone know how to approach creating a text based mosaic using action script given a collection of words?
Similar to this
http://www.ezmosaic.com/mosaic-samples/text-message-mosaic/
You can accomplish that by using the text you want to render as a mask for the picture you want to fill the text with.
Mask property

How to get the path coordinates of a shape for use with image-maps?

I am creating an image map using ImageMapster from here.
I have created a photoshop image with several images that I have cut out from the original photographs. Each image is on a separate layer.
Now, I need to get the path coordinates of each object, and I don't want to hover over every corner and manually write down each coordinate.
Is there an automated way to get this path?
Maybe there is some application or web service whence I can send my image and get the path in return?
I have tried exporting each layer separately and then importing them into illustrator and vectorizing the shape (it keeps the shape in its original position), but I can't figure out how to get the coordinate path as text. I can export it to svg, but that isn't the same simple code needed for the css image map.
Ah! After googling image-map, much thanks to Sven for the idea (he got my +1), I found this thread here on Stack Overflow.
So here is my process.
Prepare the image in Photoshop with each object on a separate layer with a transparent background (this will make it easy for you when you do the tracing).
Save your photoshop file.
Open the Photoshop file in Illustrator using File...Open (works in CS4 and CS5) and make sure to allow the option to import Photoshop's layers as separate objects. After you open the file, make sure NOT to move any of the objects around - you need them to be in the exact same place as they were in the photoshop file so they can superimpose each other when rendered to the imagemap.
Use the Live Trace with custom settings. Use the black & white mode with the threshold all the up (255). This will produce a black silhouette of the shape. (You can also use "ignore white"). Push the Trace button. If you have many layers, you can save this new tracing pattern as a preset - I called mine, Silhouette. Now, I just click on a layer and choose Silhouette from the tracing buttons' dropdown menu.
Expand the shape and make sure it consists of only a single flat shape:
you can use the blob brush in illustrator to blacken over any unwanted white areas
no groups
no compound shapes (or it won't work) - which means you can't create cutouts.
You can tell the shapes are right when you click on them - you should be able to see the path itself with no "other" shapes involved (perhaps the blob brush additions) - just a single path. An easy method is this:
select the shape
ungroup if necessary
release compound path
unite (shape mode merges all shapes into one)
Don't crop your image - you want your shape to be in the same place in the image's area as in your original photoshop image.
Don't join all the shapes together, either.
The shapes should all be individual whole shapes, all in their original locations, each on a separate layer.
Now, open Illustrator's Attributes panel, and make sure to "show options".
Select your shape and in the "Attributes" panel, switch the "Image Map" combo box from None to Polygon. Make sure to add a url (it doesn't matter what you put; you can change it later - I just put "#" and the name of the shape so I can tell which one it belongs to in the image map code)
Do this for each of the objects.
Now, in the File menu, go to "Save for Web and Devices". Skip all the settings here and just push "Save".
In the "Save As" (the title of the window is "Save Optimized As") dialogue box, use "Save As type:" and select HTML Only(*.html) if you just want the code, or HTML and Images if you want the sillouhuette, too (they will appear in a folder called "images") - and note your save location.
Now go open that html file in notepad!
Voila! All the shapes will be rendered for you as a pre-made image-map - points path and even html code. Here is what it looks like when you open in notepad the html file you just created: For this demo, I chose a particularly complicated image - one which you would never want to estimate by hand, nor have to do twice!
Don't forget to place the actual image file somewhere in your site's images folder. You can save the psd file for later and add more "stuff" if you want, and repeat the process.
I was able to create the image map this way for my photoshop picture in just a brief couple of minutes. After you do it once, it gets easier for next time.
This has been bugging me for so long and I don't have Illustrator to be able to use the solution proposed by BGM, that I created my own Photoshop addon.
You can get it here: https://creative.adobe.com/addons/products/2389
It writes all your paths' points' coordinates to a text file.
Should work for CS6 and above.
The way I use it is I create a marquee, right click -> make work path, rename my path, [repeat], then just export coords via my addon.
If anyone's interested in the scripts behind it, you can have a look here: http://pastebin.com/8ugcAV3j
In case you make any improvements, please post them here so that other people may use them as well.
Hope this helps someone.
EDIT: added link to source script (was only in comments before)
I used this to find the co-ordinates of the outline of a shape to make image hotspots for links in dreamweaver. If you have something else in mind, then you'll have to ignore some of it. This works on a single layer so you may want to make a "flattened copy first", but I don't see why it wouldn't work on a multi layered image.
Use wand to highlight area you want. This will be different for different images.
Right click and hit Make Work Path. Use a suitable tollerance which is found by trial and error. I just use the most sensitive.
Do this for all areas in all of your images creating separate paths for each.
Click edit then export paths to illustrator and save file in sensible place.
Open the saved file in word. Ignore the bumf the the top and use replace to remove ALL LETTERS. Don’t worry about the paragraph characters.
Note that all of the work paths are exported in the same file separated by a blank line so must copied and pasted separately to be used for each hotspot.
After inserting your image. Start making a map in dreamweaver with a couple of co-ordinates then simply replace these in the with information from the illustrator file for each of the map areas to be produced.
I add my updated answer I had to find since adobe has eliminated HTML output in many instances, I work mostly with photoshop (CS4) and this is a perfect solution:
1) download following file: https://github.com/andyhawkes/ps-paths-to-imagemap
2) open your image in photoshop and select the form with the magic wand
3) right click and select 'make work path' (the lesser the px, to more accurate)
4) go to File -> Scripts -> Browse ... and select the script from the first step
that's it !! this script will open your texteditor with the coordinates ...
Something like this may be useful;
http://code.google.com/p/imagemap/
Copy your image into position, then plot.
creating an image map is really simple.
First we need to look at the syntax of the code
Let's create a div.If we want to position it at the right side of our page,we can just begin by writing
<div align="right">
After that, we import the image that we are gonna map.
<img src="" alt="" width="" height="" usemap="#nameofmap" />
Now we have to define the map structure.First lets assume that you want a rectangular portion of an image to act like a hyperlink.
<map name="nameofmap">
<area href="wherever I wanna take that.com" alt="" title=""
shape=rect coords="A,B,C,D"></map>
Now we close the div.
</div>
If the shape is circular,we use the syntax
shape=circle coords="x,y,radius"
If shape is polygonal, we use
**shape=poly coords="a,b,c,d,e,f,gh"
Now comes the big part:How to find the image map coords.
Very simple.Go to
http://www.image-maps.com
Browse your image file,click "Start Mapping your image",then you proceed, and then on the next page,click "Import Old mapping Code" on the right.then you get the coords.
After that, you can use FIREBUG to change the coords according to your specifications,because image-maps only hyperlinks the whole image,so use firebug to change the coords and adjust according to your requirements.
Have fun.