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