OSDN Git Service

add convertBitmapDataToJpegTag function and testing script.
authorよや <yoya@awm.jp>
Wed, 9 Nov 2011 17:14:34 +0000 (02:14 +0900)
committerよや <yoya@awm.jp>
Wed, 9 Nov 2011 17:14:34 +0000 (02:14 +0900)
sample/swfconvertbitmapdatatojpegtag.php [new file with mode: 0644]
src/php_swfed.c
src/php_swfed.h
src/swf_object.c
src/swf_object.h
src/swf_tag.c
src/swf_tag.h
src/tests/colorformat.swf [new file with mode: 0755]

diff --git a/sample/swfconvertbitmapdatatojpegtag.php b/sample/swfconvertbitmapdatatojpegtag.php
new file mode 100644 (file)
index 0000000..1c77103
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+if ($argc != 2) {
+    fprintf(STDERR, "Usage: swfconvertbitmapdatatojpegtag.php <swf_file>\n");
+    exit(1);
+}
+
+$swf_filename = $argv[1];
+$swfdata = file_get_contents($swf_filename);
+
+$obj = new SWFEditor();
+
+if ($obj->input($swfdata) == false) {
+    fprintf(STDERR, "input failed\n");
+    exit(1);
+}
+
+$ret = $obj->convertBitmapDataToJpegTag();
+
+if ($ret == false) {
+    fprintf(STDERR, "replaceBitmapData($image_id, ...) failed\n");
+    exit(1);
+}
+
+echo $obj->output();
index 0d7df52..84fb2d3 100644 (file)
@@ -85,6 +85,7 @@ zend_function_entry swfed_functions[] = {
     PHP_ME(swfed,  replacePNGData, NULL, 0)
     PHP_ME(swfed,  replaceGIFData, NULL, 0)
     PHP_ME(swfed,  replaceBitmapData, NULL, 0)
+    PHP_ME(swfed,  convertBitmapDataToJpegTag, NULL, 0)
     PHP_ME(swfed,  applyShapeMatrixFactor, NULL, 0)
     PHP_ME(swfed,  applyShapeRectFactor, NULL, 0)
     PHP_ME(swfed,  getSoundData, NULL, 0)
@@ -1196,6 +1197,17 @@ PHP_METHOD(swfed, replaceBitmapData) {
     RETURN_TRUE;
 }
 
+PHP_METHOD(swfed, convertBitmapDataToJpegTag) {
+    swf_object_t *swf = NULL;
+    int ret;
+    swf = get_swf_object(getThis() TSRMLS_CC);
+    ret = swf_object_convert_bitmapdata_tojpegtag(swf);
+    if (ret) {
+        RETURN_FALSE;
+    }
+    RETURN_TRUE;
+}
+
 PHP_METHOD(swfed, applyShapeMatrixFactor) {
     long shape_id = 0;
     double scale_x = 1, scale_y = 1, rotate_rad = 0;
index 2b11830..6c8da98 100644 (file)
@@ -77,6 +77,7 @@ PHP_METHOD(swfed, getPNGData);
 PHP_METHOD(swfed, replacePNGData);
 PHP_METHOD(swfed, replaceGIFData);
 PHP_METHOD(swfed, replaceBitmapData);
+PHP_METHOD(swfed, convertBitmapDataToJpegTag);
 PHP_METHOD(swfed, applyShapeMatrixFactor);
 PHP_METHOD(swfed, applyShapeRectFactor);
 PHP_METHOD(swfed, getSoundData);
index 4adb67d..c10d1fd 100644 (file)
@@ -1009,6 +1009,19 @@ swf_object_replace_gifdata(swf_object_t *swf, int image_id,
 
 #endif /* HAVE_GIF */
 
+int
+swf_object_convert_bitmapdata_tojpegtag(swf_object_t *swf) {
+    swf_tag_t *tag;
+    if (swf == NULL) {
+        fprintf(stderr, "swf_object_convert_bitmapdata_tojpegtag: swf == NULL\n");
+        return 1;
+    }
+    for (tag=swf->tag_head ; tag ; tag=tag->next) {
+        swf_tag_convert_bitmap_data_tojpegtag(tag);
+    }
+    return 0;
+}
+
 unsigned char *
 swf_object_get_sounddata(swf_object_t *swf, unsigned long *length, int sound_id) {
     swf_tag_t *tag;
index e73adb0..6085700 100644 (file)
@@ -113,6 +113,8 @@ extern int swf_object_replace_pngdata(swf_object_t *swf, int image_id,
 extern int swf_object_replace_gifdata(swf_object_t *swf, int image_id,
                                       unsigned char *gif_data,
                                       unsigned long gif_data_len);
+extern int swf_object_convert_bitmapdata_tojpegtag(swf_object_t *swf);
+
 extern unsigned char *swf_object_get_sounddata(swf_object_t *swf, unsigned long *length, int sound_id);
 extern int swf_object_replace_melodata(swf_object_t *swf, int sound_id,
                                        unsigned char *melo_data,
index dd900ad..a6d1310 100644 (file)
@@ -793,6 +793,43 @@ swf_tag_replace_gif_data(swf_tag_t *tag, int image_id,
 
 #endif /* HAVE_GIF */
 
+int
+swf_tag_convert_bitmap_data_tojpegtag(swf_tag_t *tag) {
+    int tag_code;
+    int image_id;
+    unsigned char *bitmap_data;
+    unsigned long bitmap_data_len;
+    swf_tag_lossless_detail_t *swf_tag_lossless;
+    int ret;
+    if (tag == NULL) {
+        fprintf(stderr, "swf_object_convert_bitmap_data_tojpegtag: tag == NULL\n");
+        return 1;
+    }
+    tag_code = tag->code;
+    if ((tag_code != 20) && (tag_code != 36)) {
+        return 1;
+    }
+    if (tag->detail == NULL) {
+        swf_tag_lossless = (swf_tag_lossless_detail_t *) swf_tag_create_input_detail(tag, NULL);
+    } else {
+        swf_tag_lossless = (swf_tag_lossless_detail_t *) tag->detail;
+    }
+    image_id= swf_tag_lossless->image_id;
+    bitmap_data = swf_tag_lossless_get_png_data(swf_tag_lossless, &bitmap_data_len, image_id, tag);
+    if (bitmap_data == NULL) {
+        fprintf(stderr, "swf_object_convert_bitmap_data_tojpegtag: failed to swf_tag_get_png_data image_id=%d\n", image_id);
+        return 1;
+    }
+    ret = swf_tag_replace_jpeg_data(tag, image_id,
+                                    bitmap_data, bitmap_data_len, NULL, 0, 1);
+    free(bitmap_data);
+    if (ret) {
+        fprintf(stderr, "swf_object_convert_bitmap_data_tojpegtag: failed to swf_tag_replace_jpeg_data image_id=%d\n", image_id);
+        return ret;
+    }
+    return 0;
+}
+
 /*
  * DefineSound
  */
index 62d1295..d02d291 100644 (file)
@@ -80,6 +80,8 @@ extern int swf_tag_replace_png_data(swf_tag_t *tag, int image_id,
 extern int swf_tag_replace_gif_data(swf_tag_t *tag, int image_id,
                                     unsigned char *gif_data,
                                     unsigned long gif_data_len);
+extern int swf_tag_convert_bitmap_data_tojpegtag(swf_tag_t *tag);
+
 /* sound */
 extern unsigned char *swf_tag_get_sound_data(swf_tag_t *tag,
                                              unsigned long *length,
diff --git a/src/tests/colorformat.swf b/src/tests/colorformat.swf
new file mode 100755 (executable)
index 0000000..5d449c5
Binary files /dev/null and b/src/tests/colorformat.swf differ