1
0
mirror of https://github.com/php/php-src.git synced 2026-03-27 09:42:22 +01:00

Add VP8L support to getimagesize() and friends

This ammends commit 14d4ee93 to also add support for simple lossless
WebP, according to
<https://chromium.googlesource.com/webm/libwebp/+/master/doc/webp-lossless-bitstream-spec.txt>
This commit is contained in:
Christoph M. Becker
2016-10-08 10:14:59 +02:00
parent 9c1c8be7a2
commit 59cd8eb723
4 changed files with 48 additions and 8 deletions

View File

@@ -1127,22 +1127,43 @@ static struct gfxinfo *php_handle_ico(php_stream * stream)
static struct gfxinfo *php_handle_webp(php_stream * stream)
{
struct gfxinfo *result = NULL;
const char sig[4] = {'V', 'P', '8', ' '};
const char sig[3] = {'V', 'P', '8'};
unsigned char buf[18];
int lossless;
if (php_stream_read(stream, (char *) buf, 18) != 18)
return NULL;
if (memcmp(buf, sig, 4)) { /* simple lossy WebP only */
/* simple WebP only */
if (memcmp(buf, sig, 3)) {
return NULL;
}
switch (buf[3]) {
case ' ':
lossless = 0;
break;
case 'L':
lossless = 1;
break;
default:
return NULL;
}
result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo));
result->width = (buf[14]) + ((buf[15] & 0x3F) << 8);
result->height = (buf[16]) + ((buf[17] & 0x3F) << 8);
if (lossless) {
result->width = buf[9] + ((buf[10] & 0x3F) << 8) + 1;
result->height = (buf[10] >> 6) + (buf[11] << 2) + ((buf[12] & 0xF) << 10) + 1;
} else {
result->width = (buf[14]) + ((buf[15] & 0x3F) << 8);
result->height = (buf[16]) + ((buf[17] & 0x3F) << 8);
}
result->bits = 8; /* always 1 byte */
result->channels = 3; /* always YUV */
if (lossless) {
result->channels = 4; /* always ARGB */
} else {
result->channels = 3; /* always YUV */
}
return result;
}

View File

@@ -23,7 +23,7 @@ GetImageSize()
var_dump($result);
?>
--EXPECT--
array(14) {
array(15) {
["test-1pix.bmp"]=>
array(6) {
[0]=>
@@ -137,6 +137,23 @@ array(14) {
["mime"]=>
string(9) "image/gif"
}
["test3llpix.webp"]=>
array(7) {
[0]=>
int(1)
[1]=>
int(3)
[2]=>
int(18)
[3]=>
string(20) "width="1" height="3""
["bits"]=>
int(8)
["channels"]=>
int(4)
["mime"]=>
string(10) "image/webp"
}
["test3pix.webp"]=>
array(7) {
[0]=>

View File

@@ -25,7 +25,7 @@ image_type_to_mime_type()
var_dump($result);
?>
--EXPECT--
array(14) {
array(15) {
["test-1pix.bmp"]=>
string(14) "image/x-ms-bmp"
["test1bpix.bmp"]=>
@@ -40,6 +40,8 @@ array(14) {
string(10) "image/jpeg"
["test2pix.gif"]=>
string(9) "image/gif"
["test3llpix.webp"]=>
string(10) "image/webp"
["test3pix.webp"]=>
string(10) "image/webp"
["test4pix.gif"]=>

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 B