From 8b7b6809dcd06fd4453fb57c2e5ae5c456de277d Mon Sep 17 00:00:00 2001 From: "jamie.hyeon" Date: Thu, 30 Oct 2025 23:22:08 +0900 Subject: [PATCH 1/3] Add ICC profile embedding support for WebP encoding - Extract ICC profile from input color space using CGColorSpaceCopyICCData - Use WebPMux API to embed ICCP chunk in WebP container with copy_data=1 - Automatically convert Simple Format (VP8) to Extended Format (VP8X) - Add iOS 10+ availability check for CGColorSpaceCopyICCData - Skip ICC profile when maxFileSize is set (size limit takes priority) - Add comprehensive test (testWebPEncodingEmbedICCProfile) This fixes color reproduction issues with wide color gamut images (Display P3, Adobe RGB, etc.) on platforms that assume sRGB when ICC profile is missing. Fixes #119 --- .../Classes/SDImageWebPCoder.m | 51 ++++++++++++++++--- Tests/SDWebImageWebPCoderTests.m | 33 +++++++++++- 2 files changed, 77 insertions(+), 7 deletions(-) diff --git a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m index 29386a9..c57b564 100644 --- a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m +++ b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m @@ -818,7 +818,7 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef maxFileSize:(NSUInteger)maxFileSize options:(nullable SDImageCoderOptions *)options { - NSData *webpData; + NSData *webpData = nil; if (!imageRef) { return nil; } @@ -950,16 +950,55 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef result = WebPEncode(&config, &picture); WebPPictureFree(&picture); free(dest.data); - + if (result) { - // success - webpData = [NSData dataWithBytes:writer.mem length:writer.size]; + // Add ICC profile if present + // See: https://developers.google.com/speed/webp/docs/riff_container#color_profile + // Skip ICC profile when maxFileSize is set, as meeting the size limit takes priority + CFDataRef iccData = NULL; + if (colorSpace && maxFileSize == 0) { + if (@available(iOS 10, tvOS 10, macOS 10.12, watchOS 3, *)) { + iccData = CGColorSpaceCopyICCData(colorSpace); + } + } + + if (iccData && CFDataGetLength(iccData) > 0) { + // Use WebPMux to add ICCP chunk + // This automatically converts Simple Format to Extended Format (VP8X) + WebPMux *mux = WebPMuxNew(); + if (mux) { + WebPData webp_input = { + .bytes = writer.mem, + .size = writer.size + }; + + if (WebPMuxSetImage(mux, &webp_input, 1) == WEBP_MUX_OK) { + WebPData icc_chunk = { + .bytes = CFDataGetBytePtr(iccData), + .size = CFDataGetLength(iccData) + }; + + if (WebPMuxSetChunk(mux, "ICCP", &icc_chunk, 1) == WEBP_MUX_OK) { + WebPData output; + if (WebPMuxAssemble(mux, &output) == WEBP_MUX_OK) { + webpData = [NSData dataWithBytes:output.bytes length:output.size]; + WebPDataClear(&output); + } + } + } + WebPMuxDelete(mux); + } + CFRelease(iccData); + } + + if (!webpData) { + webpData = [NSData dataWithBytes:writer.mem length:writer.size]; + } } else { - // failed webpData = nil; } WebPMemoryWriterClear(&writer); - + return webpData; } diff --git a/Tests/SDWebImageWebPCoderTests.m b/Tests/SDWebImageWebPCoderTests.m index 89a89a8..aafd8be 100644 --- a/Tests/SDWebImageWebPCoderTests.m +++ b/Tests/SDWebImageWebPCoderTests.m @@ -381,7 +381,7 @@ - (void)testWebPEncodingWithICCProfile { NSString *jpegPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"TestColorspaceBefore" ofType:@"jpeg"]; NSData *jpegData = [NSData dataWithContentsOfFile:jpegPath]; UIImage *jpegImage = [[UIImage alloc] initWithData:jpegData]; - + NSData *webpData = [[SDImageWebPCoder sharedCoder] encodedDataWithImage:jpegImage format:SDImageFormatWebP options:nil]; // Re-decode to pick color UIImage *webpImage = [[SDImageWebPCoder sharedCoder] decodedImageWithData:webpData options:nil]; @@ -404,6 +404,37 @@ - (void)testWebPEncodingWithICCProfile { #endif } +- (void)testWebPEncodingEmbedICCProfile { + // Test that ICC profile is embedded in WebP + NSString *jpegPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"TestColorspaceBefore" ofType:@"jpeg"]; + NSData *jpegData = [NSData dataWithContentsOfFile:jpegPath]; + UIImage *jpegImage = [[UIImage alloc] initWithData:jpegData]; + expect(jpegImage).notTo.beNil(); + + NSData *webpData = [[SDImageWebPCoder sharedCoder] encodedDataWithImage:jpegImage format:SDImageFormatWebP options:nil]; + expect(webpData).notTo.beNil(); + + // Check for ICCP chunk + WebPData webp_data; + WebPDataInit(&webp_data); + webp_data.bytes = webpData.bytes; + webp_data.size = webpData.length; + + WebPDemuxer *demuxer = WebPDemux(&webp_data); + expect(demuxer).notTo.beNil(); + + uint32_t flags = WebPDemuxGetI(demuxer, WEBP_FF_FORMAT_FLAGS); + expect(flags & ICCP_FLAG).notTo.equal(0); + + WebPChunkIterator chunk_iter; + int result = WebPDemuxGetChunk(demuxer, "ICCP", 1, &chunk_iter); + expect(result).notTo.equal(0); + expect(chunk_iter.chunk.size).to.beGreaterThan(0); + + WebPDemuxReleaseChunkIterator(&chunk_iter); + WebPDemuxDelete(demuxer); +} + @end @implementation SDWebImageWebPCoderTests (Helpers) From 70842631e720ab7831ff8ee80ade41b4bb2088d3 Mon Sep 17 00:00:00 2001 From: "jamie.hyeon" Date: Thu, 30 Oct 2025 23:22:42 +0900 Subject: [PATCH 2/3] Add Display P3 test for wide color gamut ICC profile embedding - Add TestDisplayP3.png test image with Display P3 color space - Add testWebPEncodingDisplayP3 to verify wide color gamut support - Verify ICC profile embedding works correctly for Display P3 images (536 bytes) This test demonstrates that ICC profile embedding preserves wide color gamut information, preventing washed-out colors on Android and web browsers. --- Tests/Images/TestDisplayP3.png | Bin 0 -> 78074 bytes Tests/SDWebImageWebPCoderTests.m | 37 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 Tests/Images/TestDisplayP3.png diff --git a/Tests/Images/TestDisplayP3.png b/Tests/Images/TestDisplayP3.png new file mode 100644 index 0000000000000000000000000000000000000000..55bad7f812570a85cf5d702de55ac32d4caa599d GIT binary patch literal 78074 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

Gdr{sfu7LwK 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 Date: Thu, 30 Oct 2025 23:26:40 +0900 Subject: [PATCH 3/3] Optimize ICC profile embedding with copy_data=0 - Use copy_data=0 in WebPMuxSetImage and WebPMuxSetChunk to avoid unnecessary memory copies - Ensure writer.mem and iccData remain valid until WebPMuxAssemble completes - Release iccData only after WebPMuxAssemble finishes - Clear writer memory as the final step This reduces memory operations by 50% for images with ICC profiles. Performance improvement: - Before: Image data copied twice (SetImage copy + Assemble) - After: Image data copied once (Assemble only) - Benefit: ~50% reduction in memory operations for 1MB+ images --- SDWebImageWebPCoder/Classes/SDImageWebPCoder.m | 4 ++-- .../project.pbxproj | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m index c57b564..8e51a9e 100644 --- a/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m +++ b/SDWebImageWebPCoder/Classes/SDImageWebPCoder.m @@ -972,13 +972,13 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef .size = writer.size }; - if (WebPMuxSetImage(mux, &webp_input, 1) == WEBP_MUX_OK) { + if (WebPMuxSetImage(mux, &webp_input, 0) == WEBP_MUX_OK) { WebPData icc_chunk = { .bytes = CFDataGetBytePtr(iccData), .size = CFDataGetLength(iccData) }; - if (WebPMuxSetChunk(mux, "ICCP", &icc_chunk, 1) == WEBP_MUX_OK) { + if (WebPMuxSetChunk(mux, "ICCP", &icc_chunk, 0) == WEBP_MUX_OK) { WebPData output; if (WebPMuxAssemble(mux, &output) == WEBP_MUX_OK) { webpData = [NSData dataWithBytes:output.bytes length:output.size]; diff --git a/Tests/SDWebImageWebPCoderTests.xcodeproj/project.pbxproj b/Tests/SDWebImageWebPCoderTests.xcodeproj/project.pbxproj index 5626066..e09834c 100644 --- a/Tests/SDWebImageWebPCoderTests.xcodeproj/project.pbxproj +++ b/Tests/SDWebImageWebPCoderTests.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -23,6 +23,8 @@ 808C918E213FD131004B0F7C /* SDWebImageWebPCoderTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 808C918D213FD131004B0F7C /* SDWebImageWebPCoderTests.m */; }; 808C919C213FD2B2004B0F7C /* TestImageStatic.webp in Resources */ = {isa = PBXBuildFile; fileRef = 808C919A213FD2B2004B0F7C /* TestImageStatic.webp */; }; 808C919D213FD2B2004B0F7C /* TestImageAnimated.webp in Resources */ = {isa = PBXBuildFile; fileRef = 808C919B213FD2B2004B0F7C /* TestImageAnimated.webp */; }; + B359E6032EB3ACBE0064933A /* TestDisplayP3.png in Resources */ = {isa = PBXBuildFile; fileRef = B359E6022EB3ACBE0064933A /* TestDisplayP3.png */; }; + B359E6042EB3ACBE0064933A /* TestDisplayP3.png in Resources */ = {isa = PBXBuildFile; fileRef = B359E6022EB3ACBE0064933A /* TestDisplayP3.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -40,6 +42,7 @@ 808C918F213FD131004B0F7C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 808C919A213FD2B2004B0F7C /* TestImageStatic.webp */ = {isa = PBXFileReference; lastKnownFileType = file; path = TestImageStatic.webp; sourceTree = ""; }; 808C919B213FD2B2004B0F7C /* TestImageAnimated.webp */ = {isa = PBXFileReference; lastKnownFileType = file; path = TestImageAnimated.webp; sourceTree = ""; }; + B359E6022EB3ACBE0064933A /* TestDisplayP3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = TestDisplayP3.png; sourceTree = ""; }; D92E6791BF088D1A101E670E /* Pods-SDWebImageWebPCoderTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageWebPCoderTests.release.xcconfig"; path = "../Pods/Target Support Files/Pods-SDWebImageWebPCoderTests/Pods-SDWebImageWebPCoderTests.release.xcconfig"; sourceTree = ""; }; F121CFAEBEFA209D335C5C6D /* Pods-SDWebImageWebPCoderTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SDWebImageWebPCoderTests-macOS.debug.xcconfig"; path = "../Pods/Target Support Files/Pods-SDWebImageWebPCoderTests-macOS/Pods-SDWebImageWebPCoderTests-macOS.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -107,6 +110,7 @@ 808C9199213FD2B2004B0F7C /* Images */ = { isa = PBXGroup; children = ( + B359E6022EB3ACBE0064933A /* TestDisplayP3.png */, 32B4C7912AFB959E003A4BC7 /* TestColorspaceBefore.jpeg */, 326420302A5D53E300EE3E46 /* TestColorspaceStatic.webp */, 325E268D25C82BE1000B807B /* TestImageGrayscale.jpg */, @@ -211,6 +215,7 @@ 32B4C78C2AFB954C003A4BC7 /* TestColorspaceStatic.webp in Resources */, 32B4C78D2AFB954C003A4BC7 /* TestImageBlendAnimated.webp in Resources */, 32B4C7932AFB959E003A4BC7 /* TestColorspaceBefore.jpeg in Resources */, + B359E6042EB3ACBE0064933A /* TestDisplayP3.png in Resources */, 32B4C78B2AFB954C003A4BC7 /* TestImageGrayscale.jpg in Resources */, 32B4C78F2AFB954C003A4BC7 /* TestImageStatic.webp in Resources */, ); @@ -224,6 +229,7 @@ 808C919D213FD2B2004B0F7C /* TestImageAnimated.webp in Resources */, 808C919C213FD2B2004B0F7C /* TestImageStatic.webp in Resources */, 32B4C7922AFB959E003A4BC7 /* TestColorspaceBefore.jpeg in Resources */, + B359E6032EB3ACBE0064933A /* TestDisplayP3.png in Resources */, 326420312A5D53E300EE3E46 /* TestColorspaceStatic.webp in Resources */, 325E268E25C82BE1000B807B /* TestImageGrayscale.jpg in Resources */, ); @@ -262,10 +268,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests/Pods-SDWebImageWebPCoderTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests/Pods-SDWebImageWebPCoderTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests/Pods-SDWebImageWebPCoderTests-frameworks.sh\"\n"; @@ -297,10 +307,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests-macOS/Pods-SDWebImageWebPCoderTests-macOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests-macOS/Pods-SDWebImageWebPCoderTests-macOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SDWebImageWebPCoderTests-macOS/Pods-SDWebImageWebPCoderTests-macOS-frameworks.sh\"\n";