Skip to main content

create some thumbnails

ID
fce131a
date
2023-05-11 21:23:23+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
07ab719
message
create some thumbnails
changed files
2 files, 41 additions, 7 deletions

Changed files

get_albums_for_photo.swift (1023) → get_albums_for_photo.swift (1023)

diff --git a/get_albums_for_photo.swift b/get_albums_for_photo.swift
index f833996..737ac69 100644
--- a/get_albums_for_photo.swift
+++ b/get_albums_for_photo.swift
@@ -24,7 +24,7 @@ func getPhotoWith(uuid: String) -> PHAsset {
 
 let arguments = CommandLine.arguments
 
-if arguments.count != 1 {
+if arguments.count != 2 {
   fputs("Usage: \(arguments[0]) PHOTO_ID\n", stderr)
   exit(1)
 }

get_photos.swift (1521) → get_photos.swift (2873)

diff --git a/get_photos.swift b/get_photos.swift
index d9681f6..c67ee14 100644
--- a/get_photos.swift
+++ b/get_photos.swift
@@ -33,31 +33,65 @@ options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: fals
 
 let all_assets = PHAsset.fetchAssets(with: options)
 
-let index = IndexSet(integersIn: 750...755)
+let index = IndexSet(integersIn: 0...5)
 
 struct PhotoData: Codable {
   var uuid: String
   var albums: [String]
+  var thumbnailPath: String
+  // var thumbnail: String
 }
 
-let jsonEncoder = JSONEncoder()
+import Cocoa
+
+typealias UIImage = NSImage
 
-func getDocumentsDirectory() -> URL {
-    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
-    return paths[0]
+// https://stackoverflow.com/a/48755517/1558022
+func getAssetThumbnail(asset: PHAsset, size: Double) -> NSImage {
+    let manager = PHImageManager.default()
+    let option = PHImageRequestOptions()
+    var thumbnail = UIImage()
+    option.isSynchronous = true
+    manager.requestImage(for: asset, targetSize: CGSize(width: size, height: size), contentMode: .aspectFit, options: option, resultHandler: {(result, info)->Void in
+            thumbnail = result!
+    })
+    return thumbnail
+}
+
+func jpegDataFrom(image:NSImage) -> Data {
+    let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil)!
+    let bitmapRep = NSBitmapImageRep(cgImage: cgImage)
+    let jpegData = bitmapRep.representation(using: NSBitmapImageRep.FileType.jpeg, properties: [:])!
+    return jpegData
 }
 
 var response: [PhotoData] = []
 
 for asset in all_assets.objects(at: index) {
+  let thumbnailPath = "/tmp/photos-reviewer/\(asset.localIdentifier)_65.jpg"
+
   let data = PhotoData(
     uuid: asset.localIdentifier,
-    albums: getAlbumsContainingAsset(asset: asset)
+    albums: getAlbumsContainingAsset(asset: asset),
+    thumbnailPath: thumbnailPath
+    // thumbnail: getAssetThumbnail(asset: all_assets.firstObject!, size: 65.0).base64String!
   )
 
+  if !FileManager.default.fileExists(atPath: thumbnailPath) {
+    let jpegData = jpegDataFrom(image: getAssetThumbnail(asset: asset, size: 65.0))
+
+    try! FileManager.default.createDirectory(atPath: NSString(string: thumbnailPath).deletingLastPathComponent, withIntermediateDirectories: true, attributes: nil)
+
+    try! jpegData.write(to: URL(fileURLWithPath: thumbnailPath), options: [])
+  }
+
   response.append(data)
 }
 
+let jsonEncoder = JSONEncoder()
 let jsonData = try jsonEncoder.encode(response)
 let json = String(data: jsonData, encoding: String.Encoding.utf8)
 print(json!)
+
+// print()
+//
\ No newline at end of file