@@ -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
298325private extension NSObject {
0 commit comments