From ef5b92fb935ee069eaabf41400b00df0557be45f Mon Sep 17 00:00:00 2001 From: yoya Date: Sun, 10 Oct 2010 16:30:15 +0000 Subject: [PATCH] =?utf8?q?jpeg=20size(width,=20height)=20=E5=8F=96?= =?utf8?q?=E5=BE=97=E3=83=AB=E3=83=BC=E3=83=81=E3=83=B3=E3=82=92=E8=BF=BD?= =?utf8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/swfed/trunk@237 7c90b180-03d5-4157-b861-58a559ae9d1e --- src/config.m4 | 3 +-- src/jpeg_size.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/jpeg_size.h | 14 ++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/jpeg_size.c create mode 100644 src/jpeg_size.h diff --git a/src/config.m4 b/src/config.m4 index e31f63c..18533a1 100644 --- a/src/config.m4 +++ b/src/config.m4 @@ -63,7 +63,7 @@ if test "$PHP_SWFED" != "no"; then PHP_NEW_EXTENSION(swfed, php_swfed.c \ swf_object.c swf_header.c swf_tag.c bitstream.c swf_debug.c \ - swf_jpeg.c jpeg_segment.c swf_png.c swf_gif.c \ + swf_jpeg.c jpeg_segment.c jpeg_size.c swf_png.c swf_gif.c \ swf_rgb.c swf_rgba.c swf_argb.c swf_xrgb.c \ swf_rect.c swf_matrix.c swf_action.c \ swf_shape_with_style.c swf_styles.c swf_fill_style_array.c \ @@ -76,4 +76,3 @@ if test "$PHP_SWFED" != "no"; then swf_tag_sound.c swf_tag_sprite.c swf_tag_shape.c \ , $ext_shared) fi - diff --git a/src/jpeg_size.c b/src/jpeg_size.c new file mode 100644 index 0000000..0ce547d --- /dev/null +++ b/src/jpeg_size.c @@ -0,0 +1,69 @@ +/* + gcc -W -Wall -D__JPEG_SIZE_DEBUG__ jpeg_size.c jpeg_segment.c bitstream.c +*/ + +#include +#include +#include "jpeg_segment.h" + +int jpeg_size(unsigned char *data, unsigned long data_len, + int *width, int *height) { + jpeg_segment_t *jpeg_seg; + jpeg_segment_node_t *node; + jpeg_seg = jpeg_segment_parse(data, data_len, 0); + for (node = jpeg_seg->head ; node ; node = node->next) { + if ((0xC0 <= node->marker) && (node->marker <= 0xCF)) { // SOF + *width = 0x100 * node->data_ref[3] + node->data_ref[4]; + *height = 0x100 * node->data_ref[1] + node->data_ref[2]; + jpeg_segment_destroy(jpeg_seg); + return 0; + } + } + jpeg_segment_destroy(jpeg_seg); + return 1; +} + +#ifdef __JPEG_SIZE_DEBUG__ /* for component debug */ + +#include + +int main(int argc, char **argv) { + char *filename; + struct stat sbuf; + FILE *fp = NULL; + unsigned char *data; + unsigned long data_len; + int width = 0, height = 0; + int ret; + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return EXIT_FAILURE; + } + filename = argv[1]; + if (stat(filename, &sbuf)) { + fprintf(stderr, "Can't stat file(%s)\n", filename); + return EXIT_FAILURE; + } + data_len = sbuf.st_size; + fp = fopen(filename, "rb"); + if (fp == NULL) { + fprintf(stderr, "Can't open infile(%s)\n", filename); + return EXIT_FAILURE; + } + data = malloc(data_len); + if (fread(data, 1, data_len, fp) != data_len) { + fclose(fp); + return 1; + } + fclose(fp); + ret = jpeg_size(data, data_len, &width, &height); + free(data); + if (ret) { + fprintf(stderr, "Can't get jpeg size(%s)\n", filename); + return EXIT_FAILURE; + } + printf("width=%d height=%d\n", width, height); + return EXIT_SUCCESS; +} + +#endif /* __JPEG_SIZE_DEBUG__ */ diff --git a/src/jpeg_size.h b/src/jpeg_size.h new file mode 100644 index 0000000..a6818b9 --- /dev/null +++ b/src/jpeg_size.h @@ -0,0 +1,14 @@ +/* + +----------------------------------------------------------------------+ + | Author: yoya@awm.jp | + +----------------------------------------------------------------------+ +*/ + + +#ifndef __JPEG_SIZE_H__ +#define __JPEG_SIZE_H__ + +extern int jpeg_size(unsigned char *data, unsigned long data_len, + int *width, int *height); + +#endif /* __JPEG_SEGMENT_H__ */ -- 2.11.0