Hello.
This is a script for adjusting screen capture settings, It is not the only way to do it, if you really want to start out with a 300DPI picture, which you then want to compress down, then there are tutorials out there that shows you how to do that by QuartzDebug. There are also some defaults setting, that people write can be used for faking a Retina Display.
The main purpose of this is to change any setting that you like. I admit that I use the “Show Current Folder” to open the last folder, (saves some time). I also change the part of the name that denotes the figure, to for example figure, and I also change the folder, so that I may have Screen Shots organized by project.
See here: for a script that uses the current settings when taking a snapshot of the frontmost window: MacScripter / any way to screencapture frontmost window? (post #11)
-- Copyright © 2015 McUsr, you are free to use, and share per email, but not to publish on a webpage.
# It is released under the BSD-3 license: (see http://opensource.org/licenses/BSD-3-Clause)
# http://macscripter.net/viewtopic.php?pid=179419#p179419
property scriptTitle : "Set Screen Capture Defaults"
property showCurSettings : "1. Display All Screen Capture Settings"
property setImgFolder : "2. Change Screen Shots Folder"
property setStemName : "3. Change Screen Shot Name"
property setPicType : "4. Change Picture Type"
property setShadowPre : "5. "
property setShadowPost : " Drop Shadow"
property setShadowOpt : "5. "
property openScreenCaptureFolder : "6. Open current Screen Shots Folder"
property saveAndQuit : "7. Save any Changes & Quit"
property quitWithoutSave : "8. Quit without Saving any changes"
property choicesList : {showCurSettings, setImgFolder, setStemName, setPicType, setShadowOpt, openScreenCaptureFolder, saveAndQuit, quitWithoutSave}
-- http://osxdaily.com/2011/01/26/change-the-screenshot-save-file-location-in-mac-os-x/
-- http://osxdaily.com/2012/02/16/change-screen-shot-file-name-mac-os-x/
-- http://osxdaily.com/2010/08/16/change-the-screenshot-capture-file-format/
-- http://www.tekrevue.com/tip/how-to-customize-screenshot-options-in-mac-os-x/
-- They mention the PICT format, but that just doesn't work.
-- http://macscripter.net/viewtopic.php?id=38482
script loc
(*
Documentation:
This handler is for returning a localized string, on
some machine from some app, according to the current users
language and locale settings.
How to use this handler:
You have to open the resources folder of the app that you
inted to retrieve the localized string from, and other than
assure that you have got the correct "key" for your localized
string, you have to make a list with any spelled out language
names, and a related list with the language codes, this page may
help when contstructing the lists:
http://www.loc.gov/standards/iso639-2/php/English_list.php
Returns:
The correct bundle according to the users language and locale
settings, from which we can get the correct localized string.
*)
on getTheLProjBundle(pxPathToResourcesFolder, langList, lProjList)
# http://macscripter.net/viewtopic.php?pid=179383#p179383
set sysLang to word 1 of (do shell script "defaults read -g AppleLanguages")
# StefanK
if (count langList) ≠(count lProjList) then error "getTheLProjBundle: langList is not as long as lProjList"
set pass to 1
repeat
if pass = 1 then
-- check if the first language is amongst the "big" languages.
if sysLang is in langList then
repeat with i from 1 to (count langList)
if sysLang is item i of langList then return item i of lProjList
end repeat
else
set pass to 2
end if
else if pass = 2 then
-- check if the current AppleLocales are among the very detailed localization bundles.
try
set curLocale to do shell script "/usr/bin/defaults read -g AppleLocale"
on error
set pass to 3
end try
if pass = 2 then -- still
try
tell application id "MACS"
set locBundleName to name of first folder of folder (POSIX file pxPathToResourcesFolder as text) whose name begins with curLocale
end tell
return locBundleName
on error
set pass to 3
end try
end if
else if pass = 3 then
-- check and see if the language, has a related, *normal region specific bundle*
try
set region to (do shell script "/usr/bin/grep \"" & sysLang & "_*\" /usr/share/locale/locale.alias |/usr/bin/head -1 |/usr/bin/sed -En 's/([[:alpha:]]+[[:blank:]]+)([^_]+)_([^.]+)(.*)/\\3/p' |/usr/bin/tr 'A-Z' 'a-z'")
on error
set pass to 4
end try
if pass = 3 then -- still . . .
try
tell application id "MACS"
set locBundleName to name of first folder of folder (POSIX file pxPathToResourcesFolder as text) whose name begins with region
end tell
return locBundleName
on error
set pass to 4
end try
end if
else if pass = 4 then
-- fall back
-- Thanks to Shane Stanley
tell application id "MACS"
set rcsFol to folder (POSIX file pxPathToResourcesFolder as text)
if exists folder "English.lproj" of rcsFol then
return "English.lproj"
else if exists folder "en.lproj" of rcsFol then
return "en.lproj"
else
error "getTheLProjBundle: No english localization bundle in this App!!"
end if
end tell
end if
end repeat
end getTheLProjBundle
end script
on localizedFileNameString()
set hfsAppName to "Macintosh HD:System:Library:CoreServices:SystemUIServer.app:"
-- WARNING! the hfsname is hardcoded, run the line below, and change the contents of hfsAppName with it.
-- return (path to application "SystemUIServer" as text)
set langList to {"nl", "en", "fr", "de", "it", "jp", "es"}
set lProjList to {"Dutch.lproj", "English.lproj", "French.lproj", "German.lproj", "Italian.lproj", "Japanese.lproj", "Spanish.lproj"}
set rscPath to POSIX path of ((hfsAppName & "Contents:Resources") as alias)
set correctLProj to loc's getTheLProjBundle(rscPath, langList, lProjList)
set correctResource to path to resource correctLProj in bundle file hfsAppName
set locFileNameString to localized string of "Screen Shot" from table "ScreenCapture" in bundle correctResource
return locFileNameString
end localizedFileNameString
on askToLeavePendingChanges()
tell application (path to frontmost application as text)
try
display dialog "You have unsaved changes, do you really want to quit?" with title scriptTitle buttons {"No", "Yes"} default button 1 cancel button 1 with icon caution
set ans to true
on error
set ans to false
end try
end tell
return ans
end askToLeavePendingChanges
on run
script ScreenCaptureParameters
property imageTypes : {"BMP", "PNG", "JPG", "JP2", "TIFF", "TGA", "PDF", "GIF"}
property oldLoc : missing value
property newLoc : missing value
property oldType : missing value
property newType : missing value
property oldStemName : missing value
property newStemName : missing value
property oldShadowOpt : missing value
property newShadowOpt : missing value
property home : missing value
property changedSettings : false
property curbid : missing value
on writeSetting(setting, settingValue)
if setting is not "disable-shadow" then
set cmd to "defaults write com.apple.screencapture " & setting & space & settingValue
else
set cmd to "defaults write com.apple.screencapture disable-shadow -bool " & (settingValue as text)
end if
try
do shell script cmd
on error e number N
tell application (path to frontmost application as text)
display alert scriptTitle & ":
Something went wrong during setting the new Screen Capture setting: " & setting & "
" & e & " #: " & N
return false
end tell
end try
return true
end writeSetting
on saveSettings()
if changedSettings then
if newLoc is not missing value and newLoc ≠oldLoc then
set restartSystemUi to writeSetting("location", quoted form of newLoc)
end if
if newStemName is not missing value and newStemName ≠oldStemName then
set restartSystemUi to writeSetting("name", quoted form of newStemName)
end if
if newType is not missing value and newType ≠oldType then
set restartSystemUi to writeSetting("type", newType)
end if
if newShadowOpt is not missing value and newShadowOpt ≠oldShadowOpt then
set restartSystemUi to writeSetting("disable-shadow", newShadowOpt)
end if
if restartSystemUi then
tell application (path to frontmost application as text)
display notification "Restarting SystemUIServer within two seconds." with title scriptTitle subtitle "Screen Capture properties have changed"
end tell
do shell script "{ sleep 2; killall SystemUIServer; } & 2>& 1 >/dev/null "
end if
else
tell application (path to frontmost application as text)
display notification "There were no saved settings to change." with title scriptTitle subtitle "Quitting Script"
end tell
end if
end saveSettings
on displayCurSettings()
getOldLoc()
getOldType()
getOldStemname()
getOldShadowOpt()
-- make the report:
set rapport to "Those are the parameters currently in use:
Current save location:
" & oldLoc
if newLoc is not missing value then
set rapport to rapport & "
New save location:
" & newLoc
end if
set rapport to rapport & linefeed & linefeed & "Current Screen Shot name:
(The name will be augemented with date & time according to your country and language):
" & oldStemName
if newStemName is not missing value then
set rapport to rapport & linefeed & "New Screen Shot name:
" & newStemName
end if
set rapport to rapport & linefeed & linefeed & "Current picture type:
" & oldType
if newType is not missing value then
set rapport to rapport & linefeed & "New picture type:
" & newType
end if
set rapport to rapport & linefeed & linefeed & "Current Drop Shadow settings:
"
if oldShadowOpt then
set rapport to rapport & "Disabled"
else
set rapport to rapport & "Enabled"
end if
if newShadowOpt is not missing value then
set rapport to rapport & linefeed & "New Drop Shadow settings:
"
if newShadowOpt then
set rapport to rapport & "Disabled"
else
set rapport to rapport & "Enabled"
end if
end if
tell application (path to frontmost application as text)
try
display dialog "
" & rapport with title scriptTitle buttons {"Ok"} default button 1 cancel button 1 with icon 1
end try
end tell
end displayCurSettings
on tildeContracted from pxPath
if home is missing value then set home to POSIX path of (path to home folder)
set {tids, AppleScript's text item delimiters} to {AppleScript's text item delimiters, home}
set pxPath to text items of pxPath
set AppleScript's text item delimiters to "~/"
set pxPath to pxPath as text
set AppleScript's text item delimiters to tids
return pxPath
end tildeContracted
on tildeExpand(pxPath)
tell application id "sevs" to return POSIX path of item pxPath
end tildeExpand
on setWindowStateOnQuit()
if curbid is not missing value and curbid is not "com.apple.finder" then do shell script "/usr/bin/open -b \"com.apple.finder\" "
end setWindowStateOnQuit
on displayScreenCaptureFolder()
tell application id "sevs" to set curbid to bundle identifier of first application process whose frontmost is true and visible is true
if newLoc is missing value then
getOldLoc()
set pth to (POSIX file tildeExpand(oldLoc)) as alias
else
set pth to (POSIX file tildeExpand(newLoc)) as alias
end if
tell application id "MACS"
try
reveal first file of folder pth
on error
open pth
end try
end tell
if curbid is not "com.apple.finder" then
do shell script "/usr/bin/open -b \"com.apple.finder\" >/dev/null 2>&1 &"
delay 0.2
tell application id "sevs" to set frontmost of (first application process whose bundle identifier is curbid) to true
end if
end displayScreenCaptureFolder
on getOldLoc()
if oldLoc is missing value then
try
set oldLoc to do shell script "defaults read com.apple.screencapture location"
set oldLoc to tildeContracted from oldLoc
on error
set oldLoc to "~/Desktop/"
end try
end if
end getOldLoc
on getOldType()
try
if oldType is missing value then set oldType to do shell script "defaults read com.apple.screencapture type"
on error
set oldType to "PNG"
end try
end getOldType
on getOldStemname()
try
if oldStemName is missing value then set oldStemName to do shell script "defaults read com.apple.screencapture name"
on error
set oldStemName to localizedFileNameString()
end try
end getOldStemname
on getOldShadowOpt()
-- thanks to Mark Hunte for pointing out, that this key isn't set by default
try
if oldShadowOpt is missing value then set oldShadowOpt to (do shell script "defaults read com.apple.screencapture disable-shadow") as integer as boolean
on error
set oldShadowOpt to false
end try
end getOldShadowOpt
on chooseScreenCaptureFolder()
set failed to false
getOldLoc()
try
tell application (path to frontmost application as text)
set theF to POSIX path of (choose folder with prompt "Choose folder to store Screen Capture images in")
end tell
on error
set failed to true
end try
if not failed then
set theF to tildeContracted from theF
if theF ≠oldLoc then
set my changedSettings to true
set newLoc to theF
tell application (path to frontmost application as text)
display notification "The folder for storing images have been changed." with title scriptTitle subtitle "Changing image folder"
end tell
else
tell application (path to frontmost application as text)
display notification "Old folder and New folder are the same!" with title scriptTitle subtitle "Changing image folder"
end tell
end if
end if
end chooseScreenCaptureFolder
on chooseNewStemName()
if newStemName is not missing value then
set defAns to newStemName
else
getOldStemname()
set defAns to oldStemName
end if
set changed to false
tell application (path to frontmost application as text)
try
set theStem to text returned of (display dialog "Enter a new stem name for the Screen Capture images." with title scriptTitle default answer defAns with icon 1)
if theStem ≠defAns then set changed to true
end try
if changed then
set newStemName to theStem
set changedSettings to true
display notification "The stemname for stored images have changed." with title scriptTitle subtitle "Changing stem names."
end if
end tell
end chooseNewStemName
on choosePictureType()
getOldType()
set newImageTypes to {}
repeat with i from 1 to (count imageTypes)
if item i of imageTypes is not oldType then set end of newImageTypes to item i of imageTypes
end repeat
tell application (path to frontmost application as text)
set imgTypeChoice to choose from list newImageTypes default items item 1 of newImageTypes with title scriptTitle with prompt "Change image type from: " & oldType
if imgTypeChoice is not false then
set newType to imgTypeChoice
set changedSettings to true
display notification "The format for image capture files have changed." with title scriptTitle subtitle "Changing image format."
end if
end tell
end choosePictureType
on setShadowDropSetting()
getOldShadowOpt()
if newShadowOpt is missing value then
set newShadowOpt to not oldShadowOpt
else
set newShadowOpt to not newShadowOpt
end if
set changedSettings to true
tell application (path to frontmost application as text)
display notification "The drop shadow setting has been changed." with title scriptTitle subtitle "Changing Drop Shadow Setting"
end tell
return newShadowOpt
end setShadowDropSetting
end script
set i to 1
set shallSave to false
ScreenCaptureParameters's getOldShadowOpt()
if ScreenCaptureParameters's oldShadowOpt then
set setShadowOpt to setShadowPre & "Enable" & setShadowPost
else
set setShadowOpt to setShadowPre & "Disable" & setShadowPost
end if
set item 5 of choicesList to setShadowOpt
with timeout of 600 seconds
repeat
tell application (path to frontmost application as text)
set choice to choose from list choicesList default items item i of choicesList with title scriptTitle with prompt "Choose a Command"
end tell
if choice is false then
if ScreenCaptureParameters's changedSettings then
set ans to askToLeavePendingChanges()
if ans then exit repeat
else
exit repeat
end if
else
set choice to item 1 of choice
if choice is showCurSettings then
set i to 1
ScreenCaptureParameters's displayCurSettings()
else if choice is setImgFolder then
set i to 2
ScreenCaptureParameters's chooseScreenCaptureFolder()
else if choice is setStemName then
set i to 3
ScreenCaptureParameters's chooseNewStemName()
else if choice is setPicType then
set i to 4
ScreenCaptureParameters's choosePictureType()
else if choice is setShadowOpt then
set i to 5
if (ScreenCaptureParameters's setShadowDropSetting()) then
set setShadowOpt to setShadowPre & "Enable" & setShadowPost
else
set setShadowOpt to setShadowPre & "Disable" & setShadowPost
end if
set item 5 of choicesList to setShadowOpt
else if choice is openScreenCaptureFolder then
set i to 6
ScreenCaptureParameters's displayScreenCaptureFolder()
else if choice is saveAndQuit then
set shallSave to true
exit repeat
else if choice is quitWithoutSave then
exit repeat
end if
end if
end repeat
end timeout
if shallSave then ScreenCaptureParameters's saveSettings()
ScreenCaptureParameters's setWindowStateOnQuit()
end run
Edit
I forgot to add that using PDF, gives you screenshots with 150 DPI right away.