Finderの最前面のウィンドウで選択しておいた画像をオープンして自動画質補正を行いつつ、指定の番号からの連番をつけたJPEG画像に変換して指定フォルダに書き込むAppleScriptです。
さっそく、昨日書いた画質自動補正のプログラムを使い回しています。他のものもほぼ、過去に書いたものを使い回しているだけで、新規に書いた部分はほとんどありません。必要以上に長くなっており、おそらく呼び出していないルーチンなども含まれているはずです。
この、連番のJPEG画像はプロジェクターのスライドショー機能を用いて写真を表示するための仕様です。USBメモリなどにJPEG画像を入れておくと、ファイル名順に再生を行ってくれます。
当初はMacをプロジェクターにつないで写真.app(Photos.app)のBGMつきスライドショーを試してみたのですが、BGMに合わせた画像切り替えを行ってくれる一方で、強制的に1写真あたりの表示時間を指定することができず、「これでは使えない」として、プロジェクターの内蔵スライドショー機能を使うことにしたので、このようなScriptを作ったものです。
AppleScript名:Finder上で選択中のファイルをJPEG形式で指定フォルダに書き出し(自動補正つき).scpt |
— – Created by: Takaaki Naganoya – Created on: 2025/01/23 — – Copyright © 2025 Piyomaru Software, All Rights Reserved — use AppleScript use scripting additions use framework "Foundation" use framework "AppKit" use framework "CoreImage" use framework "UniformtypeIdentifiers" property CIFilter : a reference to current application’s CIFilter property NSArray : a reference to current application’s NSArray property CIImage : a reference to current application’s CIImage property NSUUID : a reference to current application’s NSUUID property |NSURL| : a reference to current application’s |NSURL| property NSString : a reference to current application’s NSString property NSImage : a reference to current application’s NSImage property NSPredicate : a reference to current application’s NSPredicate property NSPNGFileType : a reference to current application’s NSPNGFileType property NSBitmapImageRep : a reference to current application’s NSBitmapImageRep tell application "Finder" set aSel to selection as alias list end tell set posList to {} set aCount to 1 set bFol to POSIX path of (choose folder with prompt "出力先フォルダを選択") repeat with i in aSel set j to POSIX path of i set aUTI to getUTIFromFile(j) of me if aUTI is not equal to missing value then –ファイルから求めたUTIが指定のUTIに含まれるかをチェック set bRes to filterUTIList({aUTI}, "public.image") if bRes is not equal to {} then –自動画質調整 set aNSImage to makeNSImageFromPOSIXpath(j) of me set bImgRes to autoFiltersForNSImage(aNSImage) of me if bImgRes = false then return –NSImageをJPEGで書き出す set aStr to makeFN(aCount, 5) of me set outPath to bFol & aStr & ".jpg" set sRes to saveNSImageAtPathAsJPG(bImgRes, outPath, 0.9) of JPGkit set aCount to aCount + 1 else log j end if log j end if end repeat on autoFiltersForNSImage(aNSImage) set aCIImage to convNSImageToCIimage(aNSImage) of me set filterList to aCIImage’s autoAdjustmentFilters if filterList = missing value then return false repeat with i in filterList set aFilter to contents of i (aFilter’s setValue:(aCIImage) forKey:"inputImage") set aOutImage to (aFilter’s valueForKey:"outputImage") copy aOutImage to aCIImage end repeat set outNSImage to convCIimageToNSImage(aOutImage) of me return outNSImage end autoFiltersForNSImage on convCIimageToNSImage(aCIImage) set aRep to NSBitmapImageRep’s alloc()’s initWithCIImage:aCIImage set tmpSize to aRep’s |size|() set newImg to NSImage’s alloc()’s initWithSize:tmpSize newImg’s addRepresentation:aRep return newImg end convCIimageToNSImage on convNSImageToCIimage(aNSImage) set tiffDat to aNSImage’s TIFFRepresentation() set aRep to NSBitmapImageRep’s imageRepWithData:tiffDat set newImg to CIImage’s alloc()’s initWithBitmapImageRep:aRep return newImg end convNSImageToCIimage on makeNSImageFromAlias(anAlias) set imgPath to (POSIX path of anAlias) set aURL to (|NSURL|’s fileURLWithPath:(imgPath)) return (NSImage’s alloc()’s initWithContentsOfURL:aURL) end makeNSImageFromAlias on makeNSImageFromPOSIXpath(aPOSIX) set aURL to (|NSURL|’s fileURLWithPath:(aPOSIX)) return (NSImage’s alloc()’s initWithContentsOfURL:aURL) end makeNSImageFromPOSIXpath on getUTIFromFile(aPath) set aWS to current application’s NSWorkspace’s sharedWorkspace() set pRes to (aWS’s isFilePackageAtPath:aPath) as boolean if pRes = false then set superType to (current application’s UTTypeData) else set superType to (current application’s UTTypePackage) end if set pathString to current application’s NSString’s stringWithString:aPath set aExt to (pathString’s pathExtension()) as string set aUTType to current application’s UTType’s typeWithFilenameExtension:aExt conformingToType:(superType) if aUTType = missing value then return missing value set aUTIstr to aUTType’s identifier() as string return aUTIstr end getUTIFromFile on filterUTIList(aUTIList, aUTIstr) set anArray to NSArray’s arrayWithArray:aUTIList set aPred to NSPredicate’s predicateWithFormat_("SELF UTI-CONFORMS-TO %@", aUTIstr) set bRes to (anArray’s filteredArrayUsingPredicate:aPred) as list return bRes end filterUTIList on makeFN(aNum, aDigit) set aText to "00000000000" & (aNum as text) set aLen to length of aText set aRes to text (aLen – aDigit + 1) thru -1 of aText return aRes end makeFN script JPGkit use scripting additions use framework "Foundation" use framework "AppKit" property parent : AppleScript on saveAImageASJPG(aFile, aNewFile) set aPOSIX to (POSIX path of aFile) set aImage to current application’s NSImage’s alloc()’s initWithContentsOfFile:(aPOSIX) set newPath to current application’s NSString’s stringWithString:(POSIX path of aNewFile) set newExt to (newPath’s pathExtension()) as string if newExt is not equal to "jpg" then set newPath to repFilePathExtension(newPath, ".jpg") of me end if set sRes to saveNSImageAtPathAsJPG(aImage, newPath, 1.0) of me end saveAImageASJPG on repFilePathExtension(origPath, newExt) set aName to current application’s NSString’s stringWithString:origPath set theExtension to aName’s pathExtension() if (theExtension as string) is not equal to "" then set thePathNoExt to aName’s stringByDeletingPathExtension() set newName to (thePathNoExt’s stringByAppendingString:newExt) else set newName to (aName’s stringByAppendingString:newExt) end if return newName as string end repFilePathExtension –NSImageを指定パスにJPEG形式で保存、qulityNumは0.0〜1.0。1.0は無圧縮 on saveNSImageAtPathAsJPG(anImage, outPath, qulityNum as real) set imageRep to anImage’s TIFFRepresentation() set aRawimg to current application’s NSBitmapImageRep’s imageRepWithData:imageRep set pathString to current application’s NSString’s stringWithString:outPath set newPath to pathString’s stringByExpandingTildeInPath() set myNewImageData to (aRawimg’s representationUsingType:(current application’s NSJPEGFileType) |properties|:{NSImageCompressionFactor:qulityNum}) set aRes to (myNewImageData’s writeToFile:newPath atomically:true) as boolean return aRes –true/false end saveNSImageAtPathAsJPG end script |
More from my site
(Visited 10 times, 1 visits today)