diff options
Diffstat (limited to 'android/skia-encoder.cpp')
| -rwxr-xr-x | android/skia-encoder.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/android/skia-encoder.cpp b/android/skia-encoder.cpp new file mode 100755 index 0000000..1a405bb --- /dev/null +++ b/android/skia-encoder.cpp @@ -0,0 +1,127 @@ +#include <getopt.h> +#include <stdio.h> + +#include "SkBitmap.h" +#include "SkPaint.h" +#include "SkCanvas.h" +#include "SkColorPriv.h" +#include "SkString.h" +#include "SkImageEncoder.h" +#include "SkImageDecoder.h" + +static SkImageEncoder::Type image_type; +static char* src_image = NULL; +static char* dst_image = NULL; + +static void usage(const char* pname) +{ + fprintf(stderr, + "\n USAGE: %s -src [path] -dst [path] \n" + "\n Image Support .PNG(.png), .WEBP(.webp) or .JPEG(.jpeg) Format Only.\n" + ,pname); +} + + +static int process_cmdline(int argc, char *argv[]) +{ + char c; + +#if 0 + int i; + printf("Argumen Num = %d\n", argc); + for (i = 0; i < argc; i++) { + printf("Argument %d:%s\n", i, argv[i]); + } + printf("==>%s:%d\n", __FUNCTION__, __LINE__); +#endif + + const struct option long_opts[] = { + {"help", no_argument, NULL, 0 }, + {"src", required_argument, NULL, 1 }, + {"dst", required_argument, NULL, 2 }, + {NULL, 0, 0, 0}}; + + if (argc <= 1) { + usage(argv[0]); /* No argument */ + return 1; + } + + while ((c = getopt_long_only(argc,argv,"?",long_opts,NULL)) != EOF) { + switch (c) { + case '?': + goto out; + break; + + case 0: + goto out; + break; + + case 1: + src_image = strdup(optarg); + break; + + case 2: + dst_image = strdup(optarg); + break; + + default: + goto out; + break; + } + } + + if ((NULL == src_image) || (NULL == dst_image)) { + goto out; + } + + if ((NULL != strstr(dst_image, ".PNG")) || (NULL != strstr(dst_image, ".png"))) { + image_type = SkImageEncoder::kPNG_Type; + } else if ((NULL != strstr(dst_image, ".WEBP")) || (NULL != strstr(dst_image, ".webp"))) { + image_type = SkImageEncoder::kWEBP_Type; + } else if ((NULL != strstr(dst_image, ".JPEG")) || (NULL != strstr(dst_image, ".jpeg"))) { + image_type = SkImageEncoder::kJPEG_Type; + } else { + goto out; + } + + printf("============= Start Encode ==============\n"); + if (SkImageEncoder::kPNG_Type == image_type) { + printf("INPUT: IMAGE TYPE : PNG IMAGE\n"); + } else if (SkImageEncoder::kWEBP_Type == image_type) { + printf("INPUT: IMAGE TYPE : WEBP IMAGE\n"); + } else if (SkImageEncoder::kJPEG_Type == image_type) { + printf("INPUT: IMAGE TYPE : JPEG IMAGE\n"); + } + + printf("INPUT: Src IMAGE : %s\n", src_image); + printf("INPUT: Dest IMAGE : %s\n", dst_image); + + return 1; + +out: + usage(argv[0]); + exit(0); +} + + +int main(int argc, char* argv[]) +{ + int ret = -1; + int i = 0; + + process_cmdline(argc, argv); + + SkBitmap srcImage; + + ret = SkImageDecoder::DecodeFile(src_image, &srcImage); + printf("Decode is successful? %s \n", (ret ? "Yes" : "No")); + + ret =SkImageEncoder::EncodeFile(dst_image, srcImage, image_type, 100); + printf("Encode is successful? %s \n", (ret ? "Yes" : "No")); + + printf("============= Finish Encode ==============\n"); + + return 0; +} + + |
