summaryrefslogtreecommitdiff
path: root/android/skia-encoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'android/skia-encoder.cpp')
-rwxr-xr-xandroid/skia-encoder.cpp127
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;
+}
+
+