|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-09-09 08:11 UTC] alberty at neptunelabs dot de
Hi,
the new feature of getimagesize to results the size of compressed swf
files results in the most cases wrong results, because the current
function try to get only a part of the compressed file.
You can validate the problem with files in macromedias trial
version of flash, found in
X:\Program Files\Macromedia\Flash MX\Samples\SWF
(eg:360_degrees.swf,Clock.swf,Drawing.swf,Import_video.swf)
Regards,
Steve
here a possible working patch:
------------------------------
205,214c205,213
< static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC)
< {
< struct gfxinfo *result = NULL;
<
< long bits;
< unsigned char a[64];
< unsigned long len = 64;
< char *b;
<
< b = ecalloc (1, len + 1);
---
> static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC)
> {
> struct gfxinfo *result = NULL;
>
> long bits;
> unsigned long length;
> char *b;
> char *ccontents;
> int clen;
216,217c215,232
< result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
< php_stream_seek(stream, 5, SEEK_CUR);
---
> result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo));
>
> php_stream_seek(stream, 5, SEEK_CUR);
>
> if ((clen = php_stream_copy_to_mem(stream, &ccontents, PHP_STREAM_COPY_ALL, 0)) > 0)
> {
> length=clen*2;
> b= ecalloc (1, length + 1);
> uncompress (b, &length, ccontents, clen);
>
> bits = php_swf_get_bits (b, 0, 5);
> result->width = (php_swf_get_bits (b, 5 + bits, bits) -
> php_swf_get_bits (b, 5, bits)) / 20;
> result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) -
> php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20;
> efree (b);
>
> }
219,220c234,236
< php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */
< uncompress (b, &len, a, sizeof(a));
---
> result->bits = 0;
> result->channels = 0;
> return result;
222,230d237
< bits = php_swf_get_bits (b, 0, 5);
< result->width = (php_swf_get_bits (b, 5 + bits, bits) -
< php_swf_get_bits (b, 5, bits)) / 20;
< result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) -
< php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20;
< efree (b);
< result->bits = 0;
< result->channels = 0;
< return result;
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Nov 01 12:00:01 2025 UTC |
--- php4/ext/standard/image.c Mon Sep 9 14:19:09 2002 +++ image.c Mon Sep 9 14:43:17 2002 @@ -202,32 +202,39 @@ #if HAVE_ZLIB /* {{{ php_handle_swc */ -static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC) -{ - struct gfxinfo *result = NULL; - - long bits; - unsigned char a[64]; - unsigned long len = 64; - char *b; - - b = ecalloc (1, len + 1); +static struct gfxinfo *php_handle_swc(php_stream * stream TSRMLS_DC) +{ + struct gfxinfo *result = NULL; + + long bits; + unsigned long length; + char *b; + char *ccontents; + int clen; - result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo)); - php_stream_seek(stream, 5, SEEK_CUR); + result = (struct gfxinfo *) ecalloc (1, sizeof (struct gfxinfo)); + + php_stream_seek(stream, 5, SEEK_CUR); + + if ((clen = php_stream_copy_to_mem(stream, &ccontents, PHP_STREAM_COPY_ALL, 0)) > 0) + { + length=clen*2; + b= ecalloc (1, length + 1); + uncompress (b, &length, ccontents, clen); + + bits = php_swf_get_bits (b, 0, 5); + result->width = (php_swf_get_bits (b, 5 + bits, bits) - + php_swf_get_bits (b, 5, bits)) / 20; + result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) - + php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20; + efree (b); + + } - php_stream_read(stream, a, sizeof(a)); /* fread(a, sizeof(a), 1, fp); */ - uncompress (b, &len, a, sizeof(a)); + result->bits = 0; + result->channels = 0; + return result; - bits = php_swf_get_bits (b, 0, 5); - result->width = (php_swf_get_bits (b, 5 + bits, bits) - - php_swf_get_bits (b, 5, bits)) / 20; - result->height = (php_swf_get_bits (b, 5 + (3 * bits), bits) - - php_swf_get_bits (b, 5 + (2 * bits), bits)) / 20; - efree (b); - result->bits = 0; - result->channels = 0; - return result; } /* }}} */ #endif