diff --git a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift index 768695b..f6d58ed 100644 --- a/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift +++ b/Sources/ResgenSwift/Images/Generator/XcassetsGenerator.swift @@ -87,38 +87,42 @@ class XcassetsGenerator { let convertArguments = parsedImage.convertArguments - if parsedImage.imageExtensions.contains(.vector) { - let output = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" - let tempURL = URL(fileURLWithPath: output) + if imageData.ext == "svg" { + if parsedImage.imageExtensions.contains(.png) { - do { - if FileManager.default.fileExists(atPath: tempURL.path) { - try FileManager.default.removeItem(atPath: tempURL.path) + // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -h 300 -o path/to/output.png + // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -o path/to/output.png + // /usr/local/bin/rsvg-convert path/to/image.png -h 300 -o path/to/output.png + var command1x = ["\(svgConverter)", "\(imageData.path)"] + var command2x = ["\(svgConverter)", "\(imageData.path)"] + var command3x = ["\(svgConverter)", "\(imageData.path)"] + + self.addConvertArgument(command: &command1x, convertArgument: convertArguments.x1) + self.addConvertArgument(command: &command2x, convertArgument: convertArguments.x2) + self.addConvertArgument(command: &command3x, convertArgument: convertArguments.x3) + + command1x.append(contentsOf: ["-o", output1x]) + command2x.append(contentsOf: ["-o", output2x]) + command3x.append(contentsOf: ["-o", output3x]) + + Shell.shell(command1x) + Shell.shell(command2x) + Shell.shell(command3x) + + } else { + + let output = "\(imagesetPath)/\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + let tempURL = URL(fileURLWithPath: output) + + do { + if FileManager.default.fileExists(atPath: tempURL.path) { + try FileManager.default.removeItem(atPath: tempURL.path) + } + try FileManager.default.copyItem(atPath: imageData.path, toPath: tempURL.path) + } catch { + print(error.localizedDescription) } - try FileManager.default.copyItem(atPath: imageData.path, toPath: tempURL.path) - } catch { - print(error.localizedDescription) } - - } else if imageData.ext == "svg" { - // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -h 300 -o path/to/output.png - // /usr/local/bin/rsvg-convert path/to/image.png -w 200 -o path/to/output.png - // /usr/local/bin/rsvg-convert path/to/image.png -h 300 -o path/to/output.png - var command1x = ["\(svgConverter)", "\(imageData.path)"] - var command2x = ["\(svgConverter)", "\(imageData.path)"] - var command3x = ["\(svgConverter)", "\(imageData.path)"] - - self.addConvertArgument(command: &command1x, convertArgument: convertArguments.x1) - self.addConvertArgument(command: &command2x, convertArgument: convertArguments.x2) - self.addConvertArgument(command: &command3x, convertArgument: convertArguments.x3) - - command1x.append(contentsOf: ["-o", output1x]) - command2x.append(contentsOf: ["-o", output2x]) - command3x.append(contentsOf: ["-o", output3x]) - - Shell.shell(command1x) - Shell.shell(command2x) - Shell.shell(command3x) } else { // convert path/to/image.png -resize 200x300 path/to/output.png // convert path/to/image.png -resize 200x path/to/output.png @@ -135,7 +139,7 @@ class XcassetsGenerator { } // Write Content.json - guard let imagesetContentJson = parsedImage.contentJson else { return } + guard let imagesetContentJson = parsedImage.generateContentJson(isVector: imageData.ext == "svg") else { return } let contentJsonFilePath = "\(imagesetPath)/Contents.json" let contentJsonFilePathURL = URL(fileURLWithPath: contentJsonFilePath) diff --git a/Sources/ResgenSwift/Images/Model/ParsedImage.swift b/Sources/ResgenSwift/Images/Model/ParsedImage.swift index f43368c..42a3885 100644 --- a/Sources/ResgenSwift/Images/Model/ParsedImage.swift +++ b/Sources/ResgenSwift/Images/Model/ParsedImage.swift @@ -8,7 +8,7 @@ import Foundation enum ImageExtension: String { - case vector + case png } struct ParsedImage { @@ -61,10 +61,12 @@ struct ParsedImage { // MARK: - Assets - var contentJson: String? { + func generateContentJson(isVector: Bool) -> String? { let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted - + + let imageContent = generateImageContent(isVector: isVector) + guard let data = try? encoder.encode(imageContent) else { let error = ImagesError.writeFile("Contents.json", "Error encoding json file") print(error.description) @@ -74,8 +76,10 @@ struct ParsedImage { return String(data: data, encoding: .utf8) } - var imageContent: AssetContent { - if imageExtensions.contains(.vector) { + func generateImageContent(isVector: Bool) -> AssetContent { + + if !imageExtensions.contains(.png) && isVector { + //Generate svg return AssetContent( images: [ AssetImageDescription( @@ -93,7 +97,7 @@ struct ParsedImage { ) ) } else { - + //Generate png return AssetContent( images: [ AssetImageDescription( diff --git a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift index 8122150..1668fdd 100644 --- a/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift +++ b/Tests/ResgenSwiftTests/Images/ImageFileParserTests.swift @@ -17,8 +17,8 @@ class ImageFileParserTests: XCTestCase { # # SMAAS Support # - id image_one 25 ? vector - di image_two ? 50 webp vector + id image_one 25 ? png + di image_two ? 50 webp png d image_three 25 ? d image_four 75 ? """ @@ -38,7 +38,7 @@ class ImageFileParserTests: XCTestCase { XCTAssertEqual(firstImage!.tags, "id") XCTAssertEqual(firstImage!.width, 25) XCTAssertEqual(firstImage!.height, -1) - XCTAssertEqual(firstImage!.imageExtensions, [.vector]) + XCTAssertEqual(firstImage!.imageExtensions, [.png]) let secondImage = parsedImages.first { $0.name == "image_two" @@ -47,6 +47,6 @@ class ImageFileParserTests: XCTestCase { XCTAssertEqual(secondImage!.tags, "di") XCTAssertEqual(secondImage!.width, -1) XCTAssertEqual(secondImage!.height, 50) - XCTAssertEqual(firstImage!.imageExtensions, [.vector]) + XCTAssertEqual(firstImage!.imageExtensions, [.png]) } } diff --git a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift index 45a0401..da73498 100644 --- a/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift +++ b/Tests/ResgenSwiftTests/Images/ParsedImageTests.swift @@ -127,7 +127,7 @@ final class ParsedImageTests: XCTestCase { height: 10) // When - let property = parsedImage.imageContent + let property = parsedImage.generateImageContent(isVector: false) // Expect let expect = AssetContent( @@ -157,33 +157,41 @@ final class ParsedImageTests: XCTestCase { XCTAssertEqual(property, expect) } - func testAssetVector() { + func testAssetPng() { // Given let imageName = "the_name" let parsedImage = ParsedImage(name: imageName, tags: "id", width: 10, height: 10, - imageExtensions: [.vector]) + imageExtensions: [.png]) // When - let property = parsedImage.imageContent + let property = parsedImage.generateImageContent(isVector: false) // Expect + let expect = AssetContent( images: [ AssetImageDescription( idiom: "universal", - filename: "\(parsedImage.name).\(OutputImageExtension.svg.rawValue)" + scale: "1x", + filename: "\(parsedImage.name).\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "2x", + filename: "\(parsedImage.name)@2x.\(OutputImageExtension.png.rawValue)" + ), + AssetImageDescription( + idiom: "universal", + scale: "3x", + filename: "\(parsedImage.name)@3x.\(OutputImageExtension.png.rawValue)" ) ], info: AssetInfo( version: 1, author: "ResgenSwift-Imagium" - ), - properties: AssetProperties( - preservesVectorRepresentation: true, - templateRenderingIntent: .template ) )