Adapt export accessory view to video file types
This commit is contained in:
parent
7c36cc864f
commit
9590378b8a
3 changed files with 34 additions and 55 deletions
|
@ -23,9 +23,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func addAccessoryView(_ savePanel : NSSavePanel) {
|
func addAccessoryView(_ savePanel : NSSavePanel, fileTypes : Array<String>) {
|
||||||
let accessoryView = (ExportAccessoryView.fromNib()! as ExportAccessoryView)
|
let accessoryView = (ExportAccessoryView.fromNib()! as ExportAccessoryView)
|
||||||
accessoryView.setSavePanel(savePanel)
|
accessoryView.setSavePanel(savePanel)
|
||||||
|
accessoryView.setPossibleOptions(fileTypes)
|
||||||
|
|
||||||
savePanel.accessoryView = accessoryView as NSView
|
savePanel.accessoryView = accessoryView as NSView
|
||||||
}
|
}
|
||||||
|
@ -139,33 +140,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
savePanel.allowedFileTypes = ["tiff"]
|
savePanel.allowedFileTypes = ["tiff"]
|
||||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||||
|
|
||||||
addAccessoryView(savePanel)
|
addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg", "psd"])
|
||||||
|
|
||||||
savePanel.begin { (result) in
|
savePanel.begin { (result) in
|
||||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||||
if savePanel.allowedFileTypes![0] != "psd" {
|
if savePanel.allowedFileTypes![0] != "psd" {
|
||||||
var fileType: NSBitmapImageRep.FileType = .tiff
|
|
||||||
switch(savePanel.allowedFileTypes![0]) {
|
|
||||||
case "tiff":
|
|
||||||
fileType = .tiff;
|
|
||||||
break;
|
|
||||||
case "bmp":
|
|
||||||
fileType = .bmp;
|
|
||||||
break;
|
|
||||||
case "jpeg":
|
|
||||||
fileType = .jpeg;
|
|
||||||
break;
|
|
||||||
case "png":
|
|
||||||
fileType = .png;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let canvas = document?.makeComposite()
|
let canvas = document?.makeComposite()
|
||||||
let canvasTiff = canvas?.tiffRepresentation
|
let canvasTiff = canvas?.tiffRepresentation
|
||||||
let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
|
let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
|
||||||
let canvasPng = bitmapImage!.representation(using: fileType, properties: [:])
|
let canvasPng = bitmapImage!.representation(using: self.getBitmapType(savePanel.allowedFileTypes![0]), properties: [:])
|
||||||
|
|
||||||
try? canvasPng?.write(to: savePanel.url!)
|
try? canvasPng?.write(to: savePanel.url!)
|
||||||
} else {
|
} else {
|
||||||
|
@ -197,7 +180,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
writer?.addLayer(with: document!.makeBlendImage(layer), andName: layer.name + " (Mask)", andOpacity: 1.0, andOffset: .zero)
|
writer?.addLayer(with: document!.makeBlendImage(layer), andName: layer.name + " (Mask)", andOpacity: 1.0, andOffset: .zero)
|
||||||
}
|
}
|
||||||
|
|
||||||
writer?.addLayer(with: finalCgImage, andName: layer.name, andOpacity: Float(layer.data.opacity), andOffset: .zero, andBlendMode: Int(blendMode.rawValue), andIsNonBaseLayer: layer.clipped)
|
writer?.addLayer(with: finalCgImage, andName: layer.name, andOpacity: Float(layer.data.opacity), andOffset: .zero, andBlendMode: Int(self.getPSDBlendMode(layer).rawValue), andIsNonBaseLayer: layer.clipped)
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = writer?.createPSDData()
|
let data = writer?.createPSDData()
|
||||||
|
@ -212,17 +195,17 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
|
|
||||||
let savePanel = NSSavePanel()
|
let savePanel = NSSavePanel()
|
||||||
savePanel.title = "Save Thumbnail"
|
savePanel.title = "Save Thumbnail"
|
||||||
savePanel.allowedFileTypes = ["public.png"]
|
savePanel.allowedFileTypes = ["png"]
|
||||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||||
|
|
||||||
addAccessoryView(savePanel)
|
addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg"])
|
||||||
|
|
||||||
savePanel.begin { (result) in
|
savePanel.begin { (result) in
|
||||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||||
let canvas = document?.makeThumbnail()
|
let canvas = document?.makeThumbnail()
|
||||||
let canvasTiff = canvas?.tiffRepresentation
|
let canvasTiff = canvas?.tiffRepresentation
|
||||||
let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
|
let bitmapImage = NSBitmapImageRep(data: canvasTiff!)
|
||||||
let canvasPng = bitmapImage!.representation(using: .png, properties: [:])
|
let canvasPng = bitmapImage!.representation(using: self.getBitmapType(savePanel.allowedFileTypes![0]), properties: [:])
|
||||||
|
|
||||||
try? canvasPng?.write(to: savePanel.url!)
|
try? canvasPng?.write(to: savePanel.url!)
|
||||||
}
|
}
|
||||||
|
@ -241,6 +224,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
savePanel.allowedFileTypes = ["public.mpeg-4"]
|
savePanel.allowedFileTypes = ["public.mpeg-4"]
|
||||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||||
|
|
||||||
|
addAccessoryView(savePanel, fileTypes: ["mp4", "mov", "heic"])
|
||||||
|
|
||||||
savePanel.begin { (result) in
|
savePanel.begin { (result) in
|
||||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||||
guard let archive = Archive(data: (document?.data)!, accessMode: Archive.AccessMode.read) else {
|
guard let archive = Archive(data: (document?.data)!, accessMode: Archive.AccessMode.read) else {
|
||||||
|
@ -292,9 +277,22 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
||||||
|
|
||||||
self.exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
|
self.exporter = AVAssetExportSession(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality)
|
||||||
self.exporter?.outputURL = savePanel.url!
|
self.exporter?.outputURL = savePanel.url!
|
||||||
self.exporter?.outputFileType = AVFileType.mp4
|
|
||||||
self.exporter?.videoComposition = mainComposition
|
self.exporter?.videoComposition = mainComposition
|
||||||
|
|
||||||
|
switch(savePanel.allowedFileTypes![0]) {
|
||||||
|
case "mp4":
|
||||||
|
self.exporter?.outputFileType = .mp4;
|
||||||
|
break;
|
||||||
|
case "mov":
|
||||||
|
self.exporter?.outputFileType = .mov;
|
||||||
|
break;
|
||||||
|
case "heic":
|
||||||
|
self.exporter?.outputFileType = .heic;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
let alert = NSAlert()
|
let alert = NSAlert()
|
||||||
alert.messageText = "Exporting timelapse..."
|
alert.messageText = "Exporting timelapse..."
|
||||||
alert.addButton(withTitle: "Cancel")
|
alert.addButton(withTitle: "Cancel")
|
||||||
|
|
|
@ -11,27 +11,16 @@ class ExportAccessoryView : NSView {
|
||||||
self.savePanel = savePanel
|
self.savePanel = savePanel
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func changeFileFormat(_ sender: Any) {
|
func setPossibleOptions(_ options : Array<String>) {
|
||||||
switch(typeBox.indexOfSelectedItem) {
|
for option in options {
|
||||||
case 0:
|
typeBox.addItem(withTitle: option.uppercased())
|
||||||
savePanel?.allowedFileTypes = ["tiff"]
|
|
||||||
break
|
|
||||||
case 1:
|
|
||||||
savePanel?.allowedFileTypes = ["bmp"]
|
|
||||||
break
|
|
||||||
case 2:
|
|
||||||
savePanel?.allowedFileTypes = ["jpeg"]
|
|
||||||
break
|
|
||||||
case 3:
|
|
||||||
savePanel?.allowedFileTypes = ["png"]
|
|
||||||
break
|
|
||||||
case 4:
|
|
||||||
savePanel?.allowedFileTypes = ["psd"]
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func changeFileFormat(_ sender: Any) {
|
||||||
|
savePanel?.allowedFileTypes?.removeAll()
|
||||||
|
savePanel?.allowedFileTypes?.append((typeBox.titleOfSelectedItem?.lowercased())!)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension NSView {
|
extension NSView {
|
||||||
|
|
|
@ -25,18 +25,10 @@
|
||||||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ff-Tm-r97">
|
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ff-Tm-r97">
|
||||||
<rect key="frame" x="82" y="16" width="78" height="25"/>
|
<rect key="frame" x="82" y="16" width="78" height="25"/>
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<popUpButtonCell key="cell" type="push" title="PNG" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" tag="4" imageScaling="proportionallyDown" inset="2" selectedItem="Ygd-tc-66B" id="r8S-Bt-u1Y">
|
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="r8S-Bt-u1Y">
|
||||||
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="menu"/>
|
<font key="font" metaFont="menu"/>
|
||||||
<menu key="menu" id="laP-Yo-gBn">
|
<menu key="menu" id="laP-Yo-gBn"/>
|
||||||
<items>
|
|
||||||
<menuItem title="TIFF" id="Izp-Ei-zox"/>
|
|
||||||
<menuItem title="BMP" tag="1" id="BaW-Av-Mt9"/>
|
|
||||||
<menuItem title="JPEG" tag="3" id="3pA-ea-5fb"/>
|
|
||||||
<menuItem title="PNG" state="on" tag="4" id="Ygd-tc-66B"/>
|
|
||||||
<menuItem title="PSD" tag="4" id="aop-7X-jJg"/>
|
|
||||||
</items>
|
|
||||||
</menu>
|
|
||||||
</popUpButtonCell>
|
</popUpButtonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="changeFileFormat:" target="c22-O7-iKe" id="zxo-zP-jSb"/>
|
<action selector="changeFileFormat:" target="c22-O7-iKe" id="zxo-zP-jSb"/>
|
||||||
|
|
Reference in a new issue