1 module dlibwebp.api;
2 
3 import impl = dlibwebp.impl;
4 
5 import dlib.image;
6 import dlib.core.compound;
7 import dlib.core.stream;
8 
9 
10 
11 class WEBPLoadException: ImageLoadException {
12     this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null) {
13         super(msg, file, line, next);
14     }
15 }
16 
17 
18 /++
19  + Throws: WEBPLoadException.
20  +/
21 SuperImage loadWEBP(string filename) {
22     return impl.loadWEBP(filename);
23 }
24 
25 /++
26  + Throws: WEBPLoadException.
27  +/
28 SuperImage loadWEBP(InputStream input) {
29     return impl.loadWEBP(input);
30 }
31 
32 /++
33  + Throws: WEBPLoadException.
34  +/
35 SuperImage loadWEBP(in ubyte[] webp) {
36     return impl.loadWEBP(webp);
37 }
38 
39 
40 enum WEBPQuality : int
41 {
42     LOSSLESS = -1,
43     LOWEST = 0,
44     LOW = 50,
45     DEFAULT = 75,
46     HIGH = 80,
47     HIGHEST = 100
48 }
49 
50 
51 /++
52  + Throws: WEBPLoadException.
53  +/
54 void saveWEBP(SuperImage img, string filename, int quality = WEBPQuality.DEFAULT)
55 {
56     assert(quality >= WEBPQuality.LOSSLESS);
57     assert(quality <= WEBPQuality.HIGHEST);
58 
59     if (WEBPQuality.LOSSLESS == quality)
60     {
61         return impl.saveLosslessWEBP(img, filename);
62     }
63     else
64     {
65         return impl.saveWEBP(img, quality, filename);
66     }
67 }
68 
69 deprecated("Use img.saveWEBP(filename, quality) instead.")
70 void saveWEBP(SuperImage img, int quality, string filename)
71 {
72     return img.saveWEBP(filename, quality);
73 }
74 
75 deprecated("Use img.saveWEBP(filename, WEBPQuality.LOSSLESS) instead.")
76 void saveLosslessWEBP(SuperImage img, string filename)
77 {
78     return img.saveWEBP(filename, WEBPQuality.LOSSLESS);
79 }
80 
81 /++
82  + Returns: `false` and an error message on failure.
83  +/
84 Compound!(bool, string) saveWEBP(SuperImage img, OutputStream output, int quality = WEBPQuality.DEFAULT)
85 {
86     assert(quality >= WEBPQuality.LOSSLESS);
87     assert(quality <= WEBPQuality.HIGHEST);
88 
89     if (WEBPQuality.LOSSLESS == quality)
90     {
91         return impl.saveLosslessWEBP(img, output);
92     }
93     else
94     {
95         return impl.saveWEBP(img, quality, output);
96     }
97 }
98 
99 deprecated("Use img.saveWEBP(output, quality) instead.")
100 Compound!(bool, string) saveWEBP(SuperImage img, int quality, OutputStream output)
101 {
102     return img.saveWEBP(output, quality);
103 }
104 
105 deprecated("Use img.saveWEBP(output, WEBPQuality.LOSSLESS) instead.")
106 Compound!(bool, string) saveLosslessWEBP(SuperImage img, OutputStream output)
107 {
108     return img.saveWEBP(output, WEBPQuality.LOSSLESS);
109 }
110 
111 /++
112  + Throws: WEBPLoadException.
113  +/
114 ubyte[] saveWEBPToArray(SuperImage img, int quality = WEBPQuality.DEFAULT)
115 {
116     assert(quality >= WEBPQuality.LOSSLESS);
117     assert(quality <= WEBPQuality.HIGHEST);
118 
119     if (WEBPQuality.LOSSLESS == quality)
120     {
121         return impl.saveLosslessWEBPToArray(img);
122     }
123     else
124     {
125         return impl.saveWEBPToArray(img, quality);
126     }
127 }
128 
129 deprecated("Use img.saveWEBPToArray(WEBPQuality.LOSSLESS) instead.")
130 ubyte[] saveLosslessWEBPToArray(SuperImage img) {
131     return img.saveWEBPToArray(WEBPQuality.LOSSLESS);
132 }
133 
134