1 // Copyright 2013 Google Inc. All Rights Reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 // Author: lode.vandevenne@gmail.com (Lode Vandevenne) 16 // Author: jyrki.alakuijala@gmail.com (Jyrki Alakuijala) 17 18 // Library to recompress and optimize PNG images. Uses Zopfli as the compression 19 // backend, chooses optimal PNG color model, and tries out several PNG filter 20 // strategies. 21 22 #ifndef ZOPFLIPNG_LIB_H_ 23 #define ZOPFLIPNG_LIB_H_ 24 25 #include <string> 26 #include <vector> 27 28 enum ZopfliPNGFilterStrategy { 29 kStrategyZero = 0, 30 kStrategyOne = 1, 31 kStrategyTwo = 2, 32 kStrategyThree = 3, 33 kStrategyFour = 4, 34 kStrategyMinSum, 35 kStrategyEntropy, 36 kStrategyPredefined, 37 kStrategyBruteForce, 38 kNumFilterStrategies /* Not a strategy but used for the size of this enum */ 39 }; 40 41 struct ZopfliPNGOptions { 42 ZopfliPNGOptions(); 43 44 // Allow altering hidden colors of fully transparent pixels 45 bool lossy_transparent; 46 // Convert 16-bit per channel images to 8-bit per channel 47 bool lossy_8bit; 48 49 // Filter strategies to try 50 std::vector<ZopfliPNGFilterStrategy> filter_strategies; 51 52 // Automatically choose filter strategy using less good compression 53 bool auto_filter_strategy; 54 55 // PNG chunks to keep 56 // chunks to literally copy over from the original PNG to the resulting one 57 std::vector<std::string> keepchunks; 58 59 // Use Zopfli deflate compression 60 bool use_zopfli; 61 62 // Zopfli number of iterations 63 int num_iterations; 64 65 // Zopfli number of iterations on large images 66 int num_iterations_large; 67 68 // 0=none, 1=first, 2=last, 3=both 69 int block_split_strategy; 70 }; 71 72 // Returns 0 on success, error code otherwise. 73 // If verbose is true, it will print some info while working. 74 int ZopfliPNGOptimize(const std::vector<unsigned char>& origpng, 75 const ZopfliPNGOptions& png_options, 76 bool verbose, 77 std::vector<unsigned char>* resultpng); 78 79 #endif // ZOPFLIPNG_LIB_H_ 80