Skip to content

Commit 77b14b0

Browse files
authored
Merge pull request #1 from noppefoxwolf/feature/optimize-resizing
Skip resize to large size
2 parents 99765bf + 5536c1b commit 77b14b0

File tree

12 files changed

+302
-17
lines changed

12 files changed

+302
-17
lines changed

.github/workflows/test.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Swift Package Manager Test
2+
3+
on: [push, pull_request]
4+
5+
jobs:
6+
test:
7+
name: Test
8+
runs-on: macos-latest
9+
10+
steps:
11+
- name: Select Xcode version
12+
run: sudo xcode-select -s '/Applications/Xcode_16.app/Contents/Developer'
13+
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
17+
- name: Build and test
18+
run: xcodebuild -scheme AnimatedImage test -destination "platform=iOS Simulator,name=iPhone 16,OS=latest"

.swiftpm/AnimatedImage.xctestplan

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"configurations" : [
3+
{
4+
"id" : "70F14186-BF34-4133-80FC-9A814CD9D5AC",
5+
"name" : "Configuration 1",
6+
"options" : {
7+
8+
}
9+
}
10+
],
11+
"defaultOptions" : {
12+
13+
},
14+
"testTargets" : [
15+
{
16+
"target" : {
17+
"containerPath" : "container:",
18+
"identifier" : "AnimatedImageTests",
19+
"name" : "AnimatedImageTests"
20+
}
21+
}
22+
],
23+
"version" : 1
24+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "1610"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
<BuildActionEntries>
10+
<BuildActionEntry
11+
buildForTesting = "YES"
12+
buildForRunning = "YES"
13+
buildForProfiling = "YES"
14+
buildForArchiving = "YES"
15+
buildForAnalyzing = "YES">
16+
<BuildableReference
17+
BuildableIdentifier = "primary"
18+
BlueprintIdentifier = "AnimatedImage"
19+
BuildableName = "AnimatedImage"
20+
BlueprintName = "AnimatedImage"
21+
ReferencedContainer = "container:">
22+
</BuildableReference>
23+
</BuildActionEntry>
24+
<BuildActionEntry
25+
buildForTesting = "YES"
26+
buildForRunning = "YES"
27+
buildForProfiling = "YES"
28+
buildForArchiving = "YES"
29+
buildForAnalyzing = "YES">
30+
<BuildableReference
31+
BuildableIdentifier = "primary"
32+
BlueprintIdentifier = "AnimatedImageSwiftUI"
33+
BuildableName = "AnimatedImageSwiftUI"
34+
BlueprintName = "AnimatedImageSwiftUI"
35+
ReferencedContainer = "container:">
36+
</BuildableReference>
37+
</BuildActionEntry>
38+
</BuildActionEntries>
39+
</BuildAction>
40+
<TestAction
41+
buildConfiguration = "Debug"
42+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
43+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
44+
shouldUseLaunchSchemeArgsEnv = "YES"
45+
shouldAutocreateTestPlan = "YES">
46+
<Testables>
47+
<TestableReference
48+
skipped = "NO">
49+
<BuildableReference
50+
BuildableIdentifier = "primary"
51+
BlueprintIdentifier = "AnimatedImageTests"
52+
BuildableName = "AnimatedImageTests"
53+
BlueprintName = "AnimatedImageTests"
54+
ReferencedContainer = "container:">
55+
</BuildableReference>
56+
</TestableReference>
57+
</Testables>
58+
</TestAction>
59+
<LaunchAction
60+
buildConfiguration = "Debug"
61+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
62+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
63+
launchStyle = "0"
64+
useCustomWorkingDirectory = "NO"
65+
ignoresPersistentStateOnLaunch = "NO"
66+
debugDocumentVersioning = "YES"
67+
debugServiceExtension = "internal"
68+
allowLocationSimulation = "YES">
69+
</LaunchAction>
70+
<ProfileAction
71+
buildConfiguration = "Release"
72+
shouldUseLaunchSchemeArgsEnv = "YES"
73+
savedToolIdentifier = ""
74+
useCustomWorkingDirectory = "NO"
75+
debugDocumentVersioning = "YES">
76+
<MacroExpansion>
77+
<BuildableReference
78+
BuildableIdentifier = "primary"
79+
BlueprintIdentifier = "AnimatedImage"
80+
BuildableName = "AnimatedImage"
81+
BlueprintName = "AnimatedImage"
82+
ReferencedContainer = "container:">
83+
</BuildableReference>
84+
</MacroExpansion>
85+
</ProfileAction>
86+
<AnalyzeAction
87+
buildConfiguration = "Debug">
88+
</AnalyzeAction>
89+
<ArchiveAction
90+
buildConfiguration = "Release"
91+
revealArchiveInOrganizer = "YES">
92+
</ArchiveAction>
93+
</Scheme>
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "1610"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
<BuildActionEntries>
10+
<BuildActionEntry
11+
buildForTesting = "YES"
12+
buildForRunning = "YES"
13+
buildForProfiling = "YES"
14+
buildForArchiving = "YES"
15+
buildForAnalyzing = "YES">
16+
<BuildableReference
17+
BuildableIdentifier = "primary"
18+
BlueprintIdentifier = "AnimatedImage"
19+
BuildableName = "AnimatedImage"
20+
BlueprintName = "AnimatedImage"
21+
ReferencedContainer = "container:">
22+
</BuildableReference>
23+
</BuildActionEntry>
24+
</BuildActionEntries>
25+
</BuildAction>
26+
<TestAction
27+
buildConfiguration = "Debug"
28+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
29+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30+
shouldUseLaunchSchemeArgsEnv = "YES">
31+
<TestPlans>
32+
<TestPlanReference
33+
reference = "container:.swiftpm/AnimatedImage.xctestplan"
34+
default = "YES">
35+
</TestPlanReference>
36+
</TestPlans>
37+
</TestAction>
38+
<LaunchAction
39+
buildConfiguration = "Debug"
40+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
41+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
42+
launchStyle = "0"
43+
useCustomWorkingDirectory = "NO"
44+
ignoresPersistentStateOnLaunch = "NO"
45+
debugDocumentVersioning = "YES"
46+
debugServiceExtension = "internal"
47+
allowLocationSimulation = "YES">
48+
</LaunchAction>
49+
<ProfileAction
50+
buildConfiguration = "Release"
51+
shouldUseLaunchSchemeArgsEnv = "YES"
52+
savedToolIdentifier = ""
53+
useCustomWorkingDirectory = "NO"
54+
debugDocumentVersioning = "YES">
55+
<MacroExpansion>
56+
<BuildableReference
57+
BuildableIdentifier = "primary"
58+
BlueprintIdentifier = "AnimatedImage"
59+
BuildableName = "AnimatedImage"
60+
BlueprintName = "AnimatedImage"
61+
ReferencedContainer = "container:">
62+
</BuildableReference>
63+
</MacroExpansion>
64+
</ProfileAction>
65+
<AnalyzeAction
66+
buildConfiguration = "Debug">
67+
</AnalyzeAction>
68+
<ArchiveAction
69+
buildConfiguration = "Release"
70+
revealArchiveInOrganizer = "YES">
71+
</ArchiveAction>
72+
</Scheme>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "1610"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
<BuildActionEntries>
10+
<BuildActionEntry
11+
buildForTesting = "YES"
12+
buildForRunning = "YES"
13+
buildForProfiling = "YES"
14+
buildForArchiving = "YES"
15+
buildForAnalyzing = "YES">
16+
<BuildableReference
17+
BuildableIdentifier = "primary"
18+
BlueprintIdentifier = "AnimatedImageSwiftUI"
19+
BuildableName = "AnimatedImageSwiftUI"
20+
BlueprintName = "AnimatedImageSwiftUI"
21+
ReferencedContainer = "container:">
22+
</BuildableReference>
23+
</BuildActionEntry>
24+
</BuildActionEntries>
25+
</BuildAction>
26+
<TestAction
27+
buildConfiguration = "Debug"
28+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
29+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
30+
shouldUseLaunchSchemeArgsEnv = "YES"
31+
shouldAutocreateTestPlan = "YES">
32+
</TestAction>
33+
<LaunchAction
34+
buildConfiguration = "Debug"
35+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37+
launchStyle = "0"
38+
useCustomWorkingDirectory = "NO"
39+
ignoresPersistentStateOnLaunch = "NO"
40+
debugDocumentVersioning = "YES"
41+
debugServiceExtension = "internal"
42+
allowLocationSimulation = "YES">
43+
</LaunchAction>
44+
<ProfileAction
45+
buildConfiguration = "Release"
46+
shouldUseLaunchSchemeArgsEnv = "YES"
47+
savedToolIdentifier = ""
48+
useCustomWorkingDirectory = "NO"
49+
debugDocumentVersioning = "YES">
50+
<MacroExpansion>
51+
<BuildableReference
52+
BuildableIdentifier = "primary"
53+
BlueprintIdentifier = "AnimatedImageSwiftUI"
54+
BuildableName = "AnimatedImageSwiftUI"
55+
BlueprintName = "AnimatedImageSwiftUI"
56+
ReferencedContainer = "container:">
57+
</BuildableReference>
58+
</MacroExpansion>
59+
</ProfileAction>
60+
<AnalyzeAction
61+
buildConfiguration = "Debug">
62+
</AnalyzeAction>
63+
<ArchiveAction
64+
buildConfiguration = "Release"
65+
revealArchiveInOrganizer = "YES">
66+
</ArchiveAction>
67+
</Scheme>

Playground.swiftpm/SwiftUI/SwiftUIDemoView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ struct SwiftUIDemoView: View {
1616
}
1717

1818
var animatedImageViewConfiguration: AnimatedImageViewConfiguration {
19-
var configuration = AnimatedImageViewConfiguration.performance
19+
let configuration = AnimatedImageViewConfiguration.performance
2020
return configuration
2121
}
2222

Sources/AnimatedImage/Entity/UIImage+.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import UIKit
33
extension UIImage {
44
nonisolated func decoded(for size: CGSize, usePreparingForDisplay: Bool = true, interpolationQuality: CGInterpolationQuality) async -> UIImage? {
55
let newSize = aspectFitSize(for: self.size, maxSize: size)
6-
if newSize == self.size && usePreparingForDisplay {
6+
if self.size.isLessThanOrEqualTo(newSize) && usePreparingForDisplay {
77
return await self.byPreparingForDisplay()
88
}
99
return resize(image: self, newSize: newSize, interpolationQuality: interpolationQuality)
@@ -26,3 +26,9 @@ extension UIImage {
2626
}
2727
}
2828
}
29+
30+
extension CGSize {
31+
func isLessThanOrEqualTo(_ size: CGSize) -> Bool {
32+
width <= size.width && height <= size.height
33+
}
34+
}

Sources/AnimatedImage/Image/APNGImage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
public import Foundation
22
import ImageIO
3-
public import CoreGraphics
3+
import CoreGraphics
44

55
public final class APNGImage: AnimatedImage, Sendable {
66
public let name: String

Sources/AnimatedImage/Image/GifImage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
public import Foundation
22
import ImageIO
3-
public import CoreGraphics
3+
import CoreGraphics
44

55
public final class GifImage: AnimatedImage, Sendable {
66
public let name: String

Sources/AnimatedImage/Image/WebPImage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
public import Foundation
22
import ImageIO
3-
public import CoreGraphics
3+
import CoreGraphics
44

55
public final class WebPImage: AnimatedImage, Sendable {
66
public let name: String
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@testable import AnimatedImage
2+
import Testing
3+
import Foundation
4+
5+
@Suite
6+
struct CGSizeTests {
7+
@Test
8+
func isLessThanEqual() async throws {
9+
let size = CGSize(width: 100, height: 100)
10+
let otherSize1 = CGSize(width: 100, height: 100)
11+
#expect(size.isLessThanOrEqualTo(otherSize1) == true)
12+
let otherSize2 = CGSize(width: 10, height: 10)
13+
#expect(size.isLessThanOrEqualTo(otherSize2) == false)
14+
let otherSize3 = CGSize(width: 200, height: 200)
15+
#expect(size.isLessThanOrEqualTo(otherSize3) == true)
16+
}
17+
}

Tests/AnimatedImageTests/SwiftGifTests.swift

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)