1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-08-13 04:04:12 +02:00

[ticket/8672] Add class for retrieving imagesize without download

getimagesize() always downloads the complete file before checking
the actual image dimensions. This class will be able to do the same
without having to download possibly large files.

PHPBB3-8672
This commit is contained in:
Marc Alexander
2015-02-08 20:46:14 +01:00
parent 746a33b57b
commit 2fa99602c6
20 changed files with 707 additions and 47 deletions

BIN
tests/upload/fixture/bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 B

BIN
tests/upload/fixture/iff Normal file

Binary file not shown.

Binary file not shown.

BIN
tests/upload/fixture/jp2 Normal file

Binary file not shown.

BIN
tests/upload/fixture/jpx Normal file

Binary file not shown.

BIN
tests/upload/fixture/psd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
tests/upload/fixture/wbmp Normal file

Binary file not shown.

View File

@@ -0,0 +1,99 @@
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
require_once(__DIR__ . '/../../phpBB/includes/functions.php');
class phpbb_upload_imagesize_test extends \phpbb_test_case
{
/** @var \phpbb\upload\imagesize */
protected $imagesize;
/** @var string Path to fixtures */
protected $path;
public function setUp()
{
parent::setUp();
$this->imagesize = new \phpbb\upload\imagesize();
$this->path = __DIR__ . '/fixture/';
}
public function data_get_imagesize()
{
return array(
array('foobar', 'image/bmp', false),
array('png', 'image/png', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_PNG)),
array('gif', 'image/png', false),
array('png', '', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_PNG)),
array('gif', 'image/gif', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_GIF)),
array('jpg', 'image/gif', false),
array('gif', '', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_GIF)),
array('jpg', 'image/jpg', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_JPEG)),
array('jpg', 'image/jpeg', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_JPEG)),
array('png', 'image/jpg', false),
array('jpg', '', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_JPEG)),
array('psd', 'image/psd', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_PSD)),
array('psd', 'image/photoshop', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_PSD)),
array('jpg', 'image/psd', false),
array('psd', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_PSD)),
array('bmp', 'image/bmp', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_BMP)),
array('png', 'image/bmp', false),
array('bmp', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_BMP)),
array('tif', 'image/tif', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_TIFF_II)),
array('png', 'image/tif', false),
array('tif', '', array('width' => 1, 'height' => 1, 'type' => IMAGETYPE_TIFF_II)),
array('tif_compressed', 'image/tif', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_TIFF_II)),
array('png', 'image/tiff', false),
array('tif_compressed', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_TIFF_II)),
array('tif_msb', 'image/tif', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_TIFF_MM)),
array('tif_msb', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_TIFF_MM)),
array('wbmp', 'image/wbmp', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_WBMP)),
array('wbmp', 'image/vnd.wap.wbmp', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_WBMP)),
array('png', 'image/vnd.wap.wbmp', false),
array('wbmp', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_WBMP)),
array('iff', 'image/iff', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_IFF)),
array('iff', 'image/x-iff', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_IFF)),
array('iff_maya', 'iamge/iff', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_IFF)),
array('png', 'image/iff', false),
array('png', 'image/x-iff', false),
array('iff', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_IFF)),
array('iff_maya', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_IFF)),
array('jp2', 'image/jp2', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
array('jp2', 'image/jpx', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
array('jp2', 'image/jpm', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
array('jpg', 'image/jp2', false),
array('jpx', 'image/jpx', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
array('jp2', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
array('jpx', '', array('width' => 2, 'height' => 1, 'type' => IMAGETYPE_JPEG2000)),
);
}
/**
* @dataProvider data_get_imagesize
*/
public function test_get_imagesize($file, $mime_type, $expected)
{
$this->assertEquals($expected, $this->imagesize->get_imagesize($this->path . $file, $mime_type));
}
public function test_get_imagesize_remote()
{
$this->assertSame(array(
'width' => 80,
'height' => 80,
'type' => IMAGETYPE_JPEG,
),
$this->imagesize->get_imagesize('https://secure.gravatar.com/avatar/55502f40dc8b7c769880b10874abc9d0.jpg'));
}
}