Skip to content

Commit 560dc7d

Browse files
committed
Add support to easy export("encoding") the SVG data of SVGKImage representation
1 parent 700e0e5 commit 560dc7d

File tree

5 files changed

+39
-12
lines changed

5 files changed

+39
-12
lines changed

Example/Podfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use_frameworks!
33
target 'SDWebImageSVGCoder_Example' do
44
platform :ios, '9.3'
55
pod 'SDWebImageSVGCoder', :path => '../'
6+
pod 'SVGKit', :git => 'https://github.com/SVGKit/SVGKit.git', :branch => '3.x'
67

78
target 'SDWebImageSVGCoder_Tests' do
89
inherit! :search_paths

Example/Podfile.lock

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,41 @@
11
PODS:
2-
- CocoaLumberjack (3.5.2):
3-
- CocoaLumberjack/Core (= 3.5.2)
4-
- CocoaLumberjack/Core (3.5.2)
5-
- SDWebImage/Core (5.0.0)
6-
- SDWebImageSVGCoder (0.1.1):
2+
- CocoaLumberjack (3.5.3):
3+
- CocoaLumberjack/Core (= 3.5.3)
4+
- CocoaLumberjack/Core (3.5.3)
5+
- SDWebImage/Core (5.0.2)
6+
- SDWebImageSVGCoder (0.2.0):
77
- SDWebImage/Core (~> 5.0)
88
- SVGKit (>= 2.1)
99
- SVGKit (2.1.0):
1010
- CocoaLumberjack (~> 3.0)
1111

1212
DEPENDENCIES:
1313
- SDWebImageSVGCoder (from `../`)
14+
- SVGKit (from `https://github.com/SVGKit/SVGKit.git`, branch `3.x`)
1415

1516
SPEC REPOS:
1617
https://github.com/cocoapods/specs.git:
1718
- CocoaLumberjack
1819
- SDWebImage
19-
- SVGKit
2020

2121
EXTERNAL SOURCES:
2222
SDWebImageSVGCoder:
2323
:path: "../"
24+
SVGKit:
25+
:branch: 3.x
26+
:git: https://github.com/SVGKit/SVGKit.git
27+
28+
CHECKOUT OPTIONS:
29+
SVGKit:
30+
:commit: cf32da55633e370e66a7ba6e003224bd67296c16
31+
:git: https://github.com/SVGKit/SVGKit.git
2432

2533
SPEC CHECKSUMS:
26-
CocoaLumberjack: 118bf4a820efc641f79fa487b75ed928dccfae23
27-
SDWebImage: 5de80a0302de9e377e62f47d2fa1304efff0e55f
28-
SDWebImageSVGCoder: 6a369e2a2cacb24de6db073346d5076834471a55
34+
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
35+
SDWebImage: 6764b5fa0f73c203728052955dbefa2bf1f33282
36+
SDWebImageSVGCoder: 61f60a3064db079de646a34a5f5aa8d3ac258345
2937
SVGKit: 8a2fc74258bdb2abb54d3b65f3dd68b0277a9c4d
3038

31-
PODFILE CHECKSUM: 5438d217c00bb7b2da72c6e8ce8ec9db055a4cc6
39+
PODFILE CHECKSUM: 8107c7193dd0c4844a782937610f415caa6ef482
3240

3341
COCOAPODS: 1.6.1

Example/SDWebImageSVGCoder-Example-macOS/ViewController.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ - (void)viewDidLoad {
3535
[imageView1 sd_setImageWithURL:SVGURL placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
3636
if (image) {
3737
NSLog(@"SVG load success");
38+
NSData *svgData = [image sd_imageDataAsFormat:SDImageFormatSVG];
39+
NSAssert(svgData.length > 0, @"SVG Data should exist");
3840
}
3941
}];
4042
[imageView2 sd_setImageWithURL:SVGURL2 placeholderImage:nil options:SDWebImageRetryFailed context:@{SDWebImageContextSVGImageSize : @(imageView2.bounds.size)} progress:nil completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

Example/SDWebImageSVGCoder/SDViewController.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ - (void)viewDidLoad
5151
[imageView1 sd_setImageWithURL:svgURL placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
5252
if (image) {
5353
NSLog(@"SVGKLayeredImageView SVG load success");
54+
NSData *svgData = [image sd_imageDataAsFormat:SDImageFormatSVG];
55+
NSAssert(svgData.length > 0, @"SVG Data should exist");
5456
}
5557
}];
5658
[imageView2 sd_setImageWithURL:svgURL2 placeholderImage:nil options:SDWebImageRetryFailed completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

SDWebImageSVGCoder/Classes/SDImageSVGCoder.m

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
//
77

88
#import "SDImageSVGCoder.h"
9+
#import "SDSVGImage.h"
910
#import "SDWebImageSVGCoderDefine.h"
1011
#import <SVGKit/SVGKit.h>
1112

@@ -76,11 +77,24 @@ - (UIImage *)decodedImageWithData:(NSData *)data options:(SDImageCoderOptions *)
7677
#pragma mark - Encode
7778

7879
- (BOOL)canEncodeToFormat:(SDImageFormat)format {
79-
return NO;
80+
return format == SDImageFormatSVG;
8081
}
8182

8283
- (NSData *)encodedDataWithImage:(UIImage *)image format:(SDImageFormat)format options:(SDImageCoderOptions *)options {
83-
return nil;
84+
// Only support SVGKImage wrapper
85+
if (![image isKindOfClass:SDSVGImage.class]) {
86+
return nil;
87+
}
88+
SVGKImage *svgImage = ((SDSVGImage *)image).SVGImage;
89+
if (!svgImage) {
90+
return nil;
91+
}
92+
SVGKSource *source = svgImage.source;
93+
// Should be NSData type source
94+
if (![source isKindOfClass:SVGKSourceNSData.class]) {
95+
return nil;
96+
}
97+
return ((SVGKSourceNSData *)source).rawData;
8498
}
8599

86100
#pragma mark - Helper

0 commit comments

Comments
 (0)