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
|
||||
}
|
||||
|
||||
func addAccessoryView(_ savePanel : NSSavePanel) {
|
||||
func addAccessoryView(_ savePanel : NSSavePanel, fileTypes : Array<String>) {
|
||||
let accessoryView = (ExportAccessoryView.fromNib()! as ExportAccessoryView)
|
||||
accessoryView.setSavePanel(savePanel)
|
||||
accessoryView.setPossibleOptions(fileTypes)
|
||||
|
||||
savePanel.accessoryView = accessoryView as NSView
|
||||
}
|
||||
|
@ -139,33 +140,15 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
|||
savePanel.allowedFileTypes = ["tiff"]
|
||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||
|
||||
addAccessoryView(savePanel)
|
||||
addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg", "psd"])
|
||||
|
||||
savePanel.begin { (result) in
|
||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||
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 canvasTiff = canvas?.tiffRepresentation
|
||||
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!)
|
||||
} 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: 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()
|
||||
|
@ -212,17 +195,17 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
|||
|
||||
let savePanel = NSSavePanel()
|
||||
savePanel.title = "Save Thumbnail"
|
||||
savePanel.allowedFileTypes = ["public.png"]
|
||||
savePanel.allowedFileTypes = ["png"]
|
||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||
|
||||
addAccessoryView(savePanel)
|
||||
addAccessoryView(savePanel, fileTypes: ["png", "tiff", "jpeg"])
|
||||
|
||||
savePanel.begin { (result) in
|
||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||
let canvas = document?.makeThumbnail()
|
||||
let canvasTiff = canvas?.tiffRepresentation
|
||||
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!)
|
||||
}
|
||||
|
@ -241,6 +224,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations {
|
|||
savePanel.allowedFileTypes = ["public.mpeg-4"]
|
||||
savePanel.nameFieldStringValue = (document?.getIdealFilename())!
|
||||
|
||||
addAccessoryView(savePanel, fileTypes: ["mp4", "mov", "heic"])
|
||||
|
||||
savePanel.begin { (result) in
|
||||
if result.rawValue == NSApplication.ModalResponse.OK.rawValue {
|
||||
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?.outputURL = savePanel.url!
|
||||
self.exporter?.outputFileType = AVFileType.mp4
|
||||
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()
|
||||
alert.messageText = "Exporting timelapse..."
|
||||
alert.addButton(withTitle: "Cancel")
|
||||
|
|
|
@ -11,27 +11,16 @@ class ExportAccessoryView : NSView {
|
|||
self.savePanel = savePanel
|
||||
}
|
||||
|
||||
@IBAction func changeFileFormat(_ sender: Any) {
|
||||
switch(typeBox.indexOfSelectedItem) {
|
||||
case 0:
|
||||
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
|
||||
func setPossibleOptions(_ options : Array<String>) {
|
||||
for option in options {
|
||||
typeBox.addItem(withTitle: option.uppercased())
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func changeFileFormat(_ sender: Any) {
|
||||
savePanel?.allowedFileTypes?.removeAll()
|
||||
savePanel?.allowedFileTypes?.append((typeBox.titleOfSelectedItem?.lowercased())!)
|
||||
}
|
||||
}
|
||||
|
||||
extension NSView {
|
||||
|
|
|
@ -25,18 +25,10 @@
|
|||
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2ff-Tm-r97">
|
||||
<rect key="frame" x="82" y="16" width="78" height="25"/>
|
||||
<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"/>
|
||||
<font key="font" metaFont="menu"/>
|
||||
<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>
|
||||
<menu key="menu" id="laP-Yo-gBn"/>
|
||||
</popUpButtonCell>
|
||||
<connections>
|
||||
<action selector="changeFileFormat:" target="c22-O7-iKe" id="zxo-zP-jSb"/>
|
||||
|
|
Reference in a new issue