Skip to content

Commit c3797b9

Browse files
authored
Merge pull request #65 from SDWebImage/fix_encode_maxPixelSize_5_13
Fix the encoding maxPixelSize logic using 5.13.0 API
2 parents 18834ca + 52b24f6 commit c3797b9

File tree

5 files changed

+12
-42
lines changed

5 files changed

+12
-42
lines changed

Cartfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
github "SDWebImage/SDWebImage" ~> 5.10
1+
github "SDWebImage/SDWebImage" ~> 5.13
22
github "SDWebImage/libwebp-Xcode" ~> 1.0

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let package = Package(
1717
dependencies: [
1818
// Dependencies declare other packages that this package depends on.
1919
// .package(url: /* package url */, from: "1.0.0"),
20-
.package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.10.0"),
20+
.package(url: "https://github.com/SDWebImage/SDWebImage.git", from: "5.13.0"),
2121
.package(url: "https://github.com/SDWebImage/libwebp-Xcode.git", from: "1.1.0")
2222
],
2323
targets: [

Podfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ target 'SDWebImageWebPCoderExample' do
88
platform :ios, '9.0'
99
project example_project_path
1010
pod 'SDWebImageWebPCoder', :path => './'
11+
pod 'SDWebImage', :path => '../SDWebImage'
1112
end
1213

1314
target 'SDWebImageWebPCoderTests' do
1415
platform :ios, '9.0'
1516
project test_project_path
1617
pod 'Expecta'
1718
pod 'SDWebImageWebPCoder', :path => './'
19+
pod 'SDWebImage', :path => '../SDWebImage'
1820
end

SDWebImageWebPCoder.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ This is a SDWebImage coder plugin to support WebP image.
2727
'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited) SD_WEBP=1 WEBP_USE_INTRINSICS=1',
2828
'USER_HEADER_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/libwebp/src'
2929
}
30-
s.dependency 'SDWebImage/Core', '~> 5.10'
30+
s.dependency 'SDWebImage/Core', '~> 5.13'
3131
s.dependency 'libwebp', '~> 1.0'
3232

3333
end

SDWebImageWebPCoder/Classes/SDImageWebPCoder.m

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -68,38 +68,6 @@
6868
#endif
6969
#endif
7070

71-
/// Calculate the actual thumnail pixel size
72-
static CGSize SDCalculateThumbnailSize(CGSize fullSize, BOOL preserveAspectRatio, CGSize thumbnailSize) {
73-
CGFloat width = fullSize.width;
74-
CGFloat height = fullSize.height;
75-
CGFloat resultWidth;
76-
CGFloat resultHeight;
77-
78-
if (width == 0 || height == 0 || thumbnailSize.width == 0 || thumbnailSize.height == 0 || (width <= thumbnailSize.width && height <= thumbnailSize.height)) {
79-
// Full Pixel
80-
resultWidth = width;
81-
resultHeight = height;
82-
} else {
83-
// Thumbnail
84-
if (preserveAspectRatio) {
85-
CGFloat pixelRatio = width / height;
86-
CGFloat thumbnailRatio = thumbnailSize.width / thumbnailSize.height;
87-
if (pixelRatio > thumbnailRatio) {
88-
resultWidth = thumbnailSize.width;
89-
resultHeight = ceil(thumbnailSize.width / pixelRatio);
90-
} else {
91-
resultHeight = thumbnailSize.height;
92-
resultWidth = ceil(thumbnailSize.height * pixelRatio);
93-
}
94-
} else {
95-
resultWidth = thumbnailSize.width;
96-
resultHeight = thumbnailSize.height;
97-
}
98-
}
99-
100-
return CGSizeMake(resultWidth, resultHeight);
101-
}
102-
10371
@interface SDWebPCoderFrame : NSObject
10472

10573
@property (nonatomic, assign) NSUInteger index; // Frame index (zero based)
@@ -231,7 +199,7 @@ - (UIImage *)decodedImageWithData:(NSData *)data options:(nullable SDImageCoderO
231199
int canvasWidth = WebPDemuxGetI(demuxer, WEBP_FF_CANVAS_WIDTH);
232200
int canvasHeight = WebPDemuxGetI(demuxer, WEBP_FF_CANVAS_HEIGHT);
233201
// Check whether we need to use thumbnail
234-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(canvasWidth, canvasHeight), preserveAspectRatio, thumbnailSize);
202+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(canvasWidth, canvasHeight) scaleSize:thumbnailSize preserveAspectRatio:preserveAspectRatio shouldScaleUp:NO];
235203

236204
if (!hasAnimation || decodeFirstFrame) {
237205
// first frame for animated webp image
@@ -437,7 +405,7 @@ - (UIImage *)incrementalDecodedImageWithOptions:(SDImageCoderOptions *)options {
437405
scale = 1;
438406
}
439407
}
440-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(width, height), _preserveAspectRatio, _thumbnailSize);
408+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(width, height) scaleSize:_thumbnailSize preserveAspectRatio:_preserveAspectRatio shouldScaleUp:NO];
441409
// Check whether we need to use thumbnail
442410
if (!CGSizeEqualToSize(CGSizeMake(width, height), scaledSize)) {
443411
CGImageRef scaledImageRef = [SDImageCoderHelper CGImageCreateScaled:newImageRef size:scaledSize];
@@ -860,8 +828,8 @@ - (nullable NSData *)sd_encodedWebpDataWithImage:(nullable CGImageRef)imageRef
860828
}
861829

862830
// Check if need to scale pixel size
863-
if (maxPixelSize.width > 0 && maxPixelSize.height > 0 && (width > maxPixelSize.width || height > maxPixelSize.height)) {
864-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(width, height), YES, maxPixelSize);
831+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(width, height) scaleSize:maxPixelSize preserveAspectRatio:YES shouldScaleUp:NO];
832+
if (!CGSizeEqualToSize(scaledSize, CGSizeMake(width, height))) {
865833
result = WebPPictureRescale(&picture, scaledSize.width, scaledSize.height);
866834
if (!result) {
867835
WebPMemoryWriterClear(&writer);
@@ -1132,10 +1100,10 @@ - (UIImage *)safeStaticImageFrame {
11321100
}
11331101
_canvas = canvas;
11341102
}
1135-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(_canvasWidth, _canvasHeight), _preserveAspectRatio, _thumbnailSize);
1103+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(_canvasWidth, _canvasHeight) scaleSize:_thumbnailSize preserveAspectRatio:_preserveAspectRatio shouldScaleUp:NO];
11361104
imageRef = [self sd_drawnWebpImageWithCanvas:_canvas iterator:iter colorSpace:_colorSpace scaledSize:scaledSize];
11371105
} else {
1138-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(iter.width, iter.height), _preserveAspectRatio, _thumbnailSize);
1106+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(iter.width, iter.height) scaleSize:_thumbnailSize preserveAspectRatio:_preserveAspectRatio shouldScaleUp:NO];
11391107
imageRef = [self sd_createWebpImageWithData:iter.fragment colorSpace:_colorSpace scaledSize:scaledSize];
11401108
}
11411109
if (!imageRef) {
@@ -1213,7 +1181,7 @@ - (UIImage *)safeAnimatedImageFrameAtIndex:(NSUInteger)index {
12131181

12141182
// Now the canvas is ready, which respects of dispose method behavior. Just do normal decoding and produce image.
12151183
// Check whether we need to use thumbnail
1216-
CGSize scaledSize = SDCalculateThumbnailSize(CGSizeMake(_canvasWidth, _canvasHeight), _preserveAspectRatio, _thumbnailSize);
1184+
CGSize scaledSize = [SDImageCoderHelper scaledSizeWithImageSize:CGSizeMake(_canvasWidth, _canvasHeight) scaleSize:_thumbnailSize preserveAspectRatio:_preserveAspectRatio shouldScaleUp:NO];
12171185
CGImageRef imageRef = [self sd_drawnWebpImageWithCanvas:_canvas iterator:iter colorSpace:_colorSpace scaledSize:scaledSize];
12181186
if (!imageRef) {
12191187
return nil;

0 commit comments

Comments
 (0)