Copy link to clipboard
Copied
Hi there!
I am creating an action that has 3 basic functions;
This is what I have so far
I am creating this to quickly save 30 second figure drawings and refresh my canvas.
I found an ancient script online that did roughly this but for some reason it would stop without error (or notifying me) at 008 for no apparent reason and came with a whole host of other issues. (Like when I tried it after closing photoshop it started overwriting 001 again for instance)
Is there a way to set this up quickly under a hotkey? For reference this is the script that I was working with.
...if (displayDialogs = DialogModes.NO, (d = documents).length) {
function dateMod(v) {return new Date(File(v).modified).getTime()}
f = File(String(F = (p = Folder('/e/Specialization/30seconddrawing'))
.getFiles(/\.png$/i).sort(function(a, b) {return dateMod(a) - dateMod(b)})
.pop()).replace(/(\d+)(?=\.png$)/i, function() {return ++arguments[1]}))
function sve(v){d[0].saveAs(v,png),d[0].close()}
(png = new PNGSaveOptions()).compression = 9
w = d[0].width, h = d[0].height
Copy link to clipboard
Copied
To me it looks like you change:
saveOptions = new JPEGSaveOptions();
to
saveOptions = new PNGSaveOptions();
You now need to set the png options you want to use not the jpeg options in the variable saveOptions
PNGSaveOptions
Options for saving a document in PNG format using the Document.saveAs() method.
Properties
Property Value type What it is
compression number [0..9] Read-write. The compression value (default: 0).
interlaced boolean Read-write. True to interlace rows (default: false).
typename string Read-only. The class name of the referenced PNGSaveOptions object.
It also looks like the your Action will always close the incremented document and create a new document in Photoshop named 30secdrawing. If your action is player more that once the incremental script will overwrite increment 1 if the gets file list and sort and add 1 does not work. If there are files in the output folder with the names 30secdrawing+suffix=.png a files list array should be returned. I do not understand regular expressions. Your 30 may be messing that up you may want to try changing the filename to ThirtySecDrawing there are many regular expression used in the script to process filename
var files = saveFolder.getFiles( saveName + '*.' + saveExt );// get an array of files matching doc name prefix
/////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Fix the png save options.
You can set a Fn key or FN key + Shift or Ctrl to play your action Alt + Click on the Action Name in the Action Set.
Copy link to clipboard
Copied
You can forget about that lame script I come with something more consitent you can use smoothly even reopening Photoshop. Just tell me what you would like to be changed in this script if that does not fit you completely and I'll do it:
function mod(v) {return new Date(File(v).modified).getTime()}
if (displayDialogs = DialogModes.NO, (d = documents).length) {
f=File(String(F=(p=Folder('~/desktop/I')).getFiles(/\.png$/i)
.sort(function(a, b) {return mod(a) - mod(b)}).pop()).replace
(/(\d+)(?=\.png$)/i, function() {return ++arguments[1]}));
(png = new PNGSaveOptions()).compression = 9
function sve(v) {d[0].saveAs(v, png), d[0].close()}
sve(+!!F ? f : File(p + '/0.png')), d.add()
}
else alert('Open / create at least one document!')
Don't forget to save it in your Photoshop > Presets / Scripts folder. After you reopen Photoshop you can bind it to action or do something I prefer personaly so make shortcut (from Edit / Keyboard Shortcuts), however actions have higher priority...
Copy link to clipboard
Copied
From his action after the save as png he want the document closed and a new similar empty document opened with the same orginal document name. I can not tell if it should have a transparent layer 0 or have a color. All should saved into his E:/Specialization/30seconddrawing not on his desktop I
Its great that your scripts are consitent and well written but for those new to scripting or someone like me that does not know javascript I only hack on them. Your advance coding style is very hard to read.
Copy link to clipboard
Copied
Yes I know. But I would like to wait for him to tell me it clearly as these things are enough easy he can change script himself, and there is another thing that may be not so important. Last 4 days I wrote few scripts for people who came here to ask for help in solving their problems. Where they are now? 😛
I wrote what they wanted and they even didn't come to see anyone answered anything ha ha. There are at least 4 scripts from last days they do what they wanted but it seems they do not care about, and want to do everything manually despite they stated 🙂
Well if he'll answer then I update script instead of loosing time for potentially another 'ghost' person 😄
Sorry for hard coding. I understand it. It's just my specific style. I never knew that happen some day, but I worked out that, or rather that came to me naturally. If there is something that someone can't get, I'm willing to explain every single line 😉
Copy link to clipboard
Copied
Hey there!
Thanks so much for the quick help. It does roughly what I want it to do. I love that it still numbers accurately even after closing photoshop.
What can I change to make the new document that opens after saving and closing the original have the same size and general settings?
I see sve(+!!F ? f : File(p + '/0.png')), d.add()
Something for the document name like: var p = app.activeDocument
could work?
Right now this:
turns into this:
It would be great if resolution and current filename and document settings was retained so I can for instance have a thirtysecond drawing folder with
figuredrawing1.png
figuredrawing2.png
figuredrawing3.png
...
And then the next day create a document with a different size called
facialexpression.png
save to the same folder with
facialexpression1.png
facialexpression2.png
Copy link to clipboard
Copied
if (displayDialogs = DialogModes.NO, (d = documents).length) {
function dateMod(v) {return new Date(File(v).modified).getTime()}
f = File(String(F = (p = Folder('/e/Specialization/30seconddrawing'))
.getFiles(/\.png$/i).sort(function(a, b) {return dateMod(a) - dateMod(b)})
.pop()).replace(/(\d+)(?=\.png$)/i, function() {return ++arguments[1]}))
function sve(v){d[0].saveAs(v,png),d[0].close()}
(png = new PNGSaveOptions()).compression = 9
w = d[0].width, h = d[0].height, r = d[0].resolution
n = d[0].name, sve(+!!F ? f : File(p + '/' + n + '1.png'))
d.add(w, h, r, n, NewDocumentMode.RGB, DocumentFill.
WHITE, 1, BitsPerChannelType.EIGHT, 'sRGB IEC61966-2.1')
}
else alert('Open / create at least one document!')
Now it will always use E:\Specialistaion\30seconddrawing path to save your files (name you used creating file + increasing number suffix), while counting now is going to start not from 0, but 1. You also get width, height, resolution and name that will be applied to new document creation, while name additionally for savings. As to rest document settings they will be always the same (so even when you opened document with other, all next ones will keep properties written from script). They are rgb mode, white filling, square pixels, eight bits per channel and some sRGB color profile. If you need others tell me and I replace them, however I try other method to read all documents settings that is called Antion Manager, hard one.
Copy link to clipboard
Copied
Good job...
Copy link to clipboard
Copied
Thanks for this.
It wasn't exactly what I was looking for but you did provide enough information for me to modify this for my purpose which was to save jpg with an incermental file number.
I added this code to pad the number:
Number.prototype.pad = function(size) {
var s = String(this);
while (s.length < (size || 2)) {s = "0" + s;}
return s;
}
and modified the function to return a zero padded number like this:
f = File(String(F = (p = Folder(fldr))
.getFiles(/\.jpg$/i).sort(function(a, b) {return dateMod(a) - dateMod(b)})
.pop()).replace(/(\d+)(?=\.jpg$)/i, function() {return (++arguments[1]).pad(3);}))
Copy link to clipboard
Copied
Pinging @Kukurykus (even if the request is old, it might still help someone)
Copy link to clipboard
Copied
I too find it disappointing that many users do not acknowledge that the have read the replies or that they no longer have a problem.
Copy link to clipboard
Copied
That script made by Kukurykus is fantastic.
It does three things that I need:
1. It saves file to specific folder without showing save dialog
2. If I run script again, it doesn't overwrite the previously saved file, instead it continues file name numbering (Untitled-11.png, Untitled-12.png and so on.)
3. If I restart Photoshop, create new file and PS generates the default name Untitled-1 for it, I can still use the script to save file without overwriting previous files.
I wanted to keep saved file open, so I changed close() to close(0).
I wanted similar script to save JPEG, GIF and TIFF files too. I edited the script and changed every "PNG" to "JPEG". Script saved JPEG files to right folder, but it always overwrited the previously saved file. I want to keep previous versions and continue file numbering.
Then I changed every "PNG" to "GIF". That script didn't save anything anywhere.
Can anyone help me? I'm a newbie in scripting. I want to save JPEG, GIF and TIFF same way like the original script saves PNG's.
Copy link to clipboard
Copied
Find methods for other file formats instead of JPG options in Photoshop Javascript Reference