Skip to content

Commit 1a589db

Browse files
chore(preprod): Save images as original file format to ParsedAssets
1 parent b6d72df commit 1a589db

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

apple-catalog-parsing/native/swift/AssetCatalogParser/Sources/AssetCatalogParser/AssetCatalogReader.swift

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ enum AssetUtil {
7777

7878
let (structuredThemeStore, assetKeys) = initializeCatalog(from: file)
7979

80-
var images: [String: CGImage] = [:]
80+
var images: [String: (cgImage: CGImage, format: String)] = [:]
8181

8282
for key in assetKeys {
8383
let keyList = unsafeBitCast(
@@ -129,7 +129,13 @@ enum AssetUtil {
129129
let (width, height, unslicedImage) = resolveImageDimensions(rendition, isVector)
130130
let assetType = determineAssetType(key)
131131
let imageId = UUID().uuidString
132-
images[imageId] = unslicedImage
132+
133+
let fileExtension = (renditionTypeName as NSString).pathExtension.lowercased()
134+
let originalFormat = fileExtension.isEmpty ? "png" : fileExtension
135+
136+
if originalFormat != "svg", let unslicedImage = unslicedImage {
137+
images[imageId] = (cgImage: unslicedImage, format: originalFormat)
138+
}
133139

134140
let asset = AssetCatalogEntry(
135141
imageId: imageId,
@@ -161,17 +167,13 @@ enum AssetUtil {
161167
.appendingPathComponent("Assets")
162168
.appendingPathExtension("json")
163169
try! data.write(to: url, options: [])
164-
for (id, cgImage) in images {
165-
let fileURL = folder.appendingPathComponent(id)
166-
.appendingPathExtension("png")
167-
168-
guard let dest = CGImageDestinationCreateWithURL(
169-
fileURL as CFURL,
170-
UTType.png.identifier as CFString,
171-
1,
172-
nil
173-
)
174-
else {
170+
for (id, imageInfo) in images {
171+
let format = imageInfo.format
172+
let cgImage = imageInfo.cgImage
173+
let fileURL = folder.appendingPathComponent(id).appendingPathExtension(format)
174+
175+
let utType = utTypeForExtension(format)
176+
guard let dest = CGImageDestinationCreateWithURL(fileURL as CFURL, utType as CFString, 1, nil) else {
175177
print("⚠️ Could not create destination for \(fileURL.path)")
176178
continue
177179
}
@@ -293,6 +295,31 @@ enum AssetUtil {
293295

294296
return (width, height, unslicedImage)
295297
}
298+
299+
private static func utTypeForExtension(_ ext: String) -> String {
300+
switch ext {
301+
case "jpg", "jpeg":
302+
return UTType.jpeg.identifier
303+
case "png":
304+
return UTType.png.identifier
305+
case "heic", "heif":
306+
return UTType.heic.identifier
307+
case "gif":
308+
return UTType.gif.identifier
309+
case "webp":
310+
return UTType.webP.identifier
311+
case "pdf":
312+
return UTType.pdf.identifier
313+
case "svg":
314+
return UTType.svg.identifier
315+
case "tiff", "tif":
316+
return UTType.tiff.identifier
317+
case "bmp":
318+
return UTType.bmp.identifier
319+
default:
320+
return UTType.png.identifier
321+
}
322+
}
296323
}
297324

298325
private extension NSObject {

0 commit comments

Comments
 (0)