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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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]=>
|
||||
|
||||
@@ -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"]=>
|
||||
|
||||
BIN
ext/standard/tests/image/test3llpix.webp
Normal file
BIN
ext/standard/tests/image/test3llpix.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 B |
Reference in New Issue
Block a user