Use 90% JPEG quality for thumbnails and previews by default
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
182bfd9f23
commit
1e281bc616
|
@ -54,6 +54,8 @@ class OC_Image implements \OCP\IImage {
|
||||||
private $fileInfo;
|
private $fileInfo;
|
||||||
/** @var \OCP\ILogger */
|
/** @var \OCP\ILogger */
|
||||||
private $logger;
|
private $logger;
|
||||||
|
/** @var \OCP\IConfig */
|
||||||
|
private $config;
|
||||||
/** @var array */
|
/** @var array */
|
||||||
private $exif;
|
private $exif;
|
||||||
|
|
||||||
|
@ -79,12 +81,17 @@ class OC_Image implements \OCP\IImage {
|
||||||
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by
|
* @param resource|string $imageRef The path to a local file, a base64 encoded string or a resource created by
|
||||||
* an imagecreate* function.
|
* an imagecreate* function.
|
||||||
* @param \OCP\ILogger $logger
|
* @param \OCP\ILogger $logger
|
||||||
|
* @param \OCP\IConfig $config
|
||||||
*/
|
*/
|
||||||
public function __construct($imageRef = null, $logger = null) {
|
public function __construct($imageRef = null, $logger = null, \OCP\IConfig $config = null) {
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
if (is_null($logger)) {
|
if (is_null($logger)) {
|
||||||
$this->logger = \OC::$server->getLogger();
|
$this->logger = \OC::$server->getLogger();
|
||||||
}
|
}
|
||||||
|
$this->config = $config;
|
||||||
|
if ($config === null) {
|
||||||
|
$this->config = \OC::$server->getConfig();
|
||||||
|
}
|
||||||
|
|
||||||
if (\OC_Util::fileInfoLoaded()) {
|
if (\OC_Util::fileInfoLoaded()) {
|
||||||
$this->fileInfo = new finfo(FILEINFO_MIME_TYPE);
|
$this->fileInfo = new finfo(FILEINFO_MIME_TYPE);
|
||||||
|
@ -267,7 +274,7 @@ class OC_Image implements \OCP\IImage {
|
||||||
$retVal = imagegif($this->resource, $filePath);
|
$retVal = imagegif($this->resource, $filePath);
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_JPEG:
|
case IMAGETYPE_JPEG:
|
||||||
$retVal = imagejpeg($this->resource, $filePath);
|
$retVal = imagejpeg($this->resource, $filePath, $this->getJpegQuality());
|
||||||
break;
|
break;
|
||||||
case IMAGETYPE_PNG:
|
case IMAGETYPE_PNG:
|
||||||
$retVal = imagepng($this->resource, $filePath);
|
$retVal = imagepng($this->resource, $filePath);
|
||||||
|
@ -319,7 +326,12 @@ class OC_Image implements \OCP\IImage {
|
||||||
$res = imagepng($this->resource);
|
$res = imagepng($this->resource);
|
||||||
break;
|
break;
|
||||||
case "image/jpeg":
|
case "image/jpeg":
|
||||||
$res = imagejpeg($this->resource);
|
$quality = $this->getJpegQuality();
|
||||||
|
if ($quality !== null) {
|
||||||
|
$res = imagejpeg($this->resource, null, $quality);
|
||||||
|
} else {
|
||||||
|
$res = imagejpeg($this->resource);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case "image/gif":
|
case "image/gif":
|
||||||
$res = imagegif($this->resource);
|
$res = imagegif($this->resource);
|
||||||
|
@ -342,6 +354,17 @@ class OC_Image implements \OCP\IImage {
|
||||||
return base64_encode($this->data());
|
return base64_encode($this->data());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int|null
|
||||||
|
*/
|
||||||
|
protected function getJpegQuality() {
|
||||||
|
$quality = $this->config->getAppValue('preview', 'jpeg_quality', 90);
|
||||||
|
if ($quality !== null) {
|
||||||
|
$quality = min(100, max(10, (int) $quality));
|
||||||
|
}
|
||||||
|
return $quality;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (I'm open for suggestions on better method name ;)
|
* (I'm open for suggestions on better method name ;)
|
||||||
* Get the orientation based on EXIF data.
|
* Get the orientation based on EXIF data.
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
namespace Test;
|
namespace Test;
|
||||||
|
|
||||||
use OC;
|
use OC;
|
||||||
|
use OCP\IConfig;
|
||||||
|
|
||||||
class ImageTest extends \Test\TestCase {
|
class ImageTest extends \Test\TestCase {
|
||||||
public static function tearDownAfterClass() {
|
public static function tearDownAfterClass() {
|
||||||
|
@ -133,7 +134,12 @@ class ImageTest extends \Test\TestCase {
|
||||||
$expected = ob_get_clean();
|
$expected = ob_get_clean();
|
||||||
$this->assertEquals($expected, $img->data());
|
$this->assertEquals($expected, $img->data());
|
||||||
|
|
||||||
$img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.jpg');
|
$config = $this->createMock(IConfig::class);
|
||||||
|
$config->expects($this->once())
|
||||||
|
->method('getAppValue')
|
||||||
|
->with('preview', 'jpeg_quality', 90)
|
||||||
|
->willReturn(null);
|
||||||
|
$img = new \OC_Image(OC::$SERVERROOT.'/tests/data/testimage.jpg', null, $config);
|
||||||
$raw = imagecreatefromstring(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg'));
|
$raw = imagecreatefromstring(file_get_contents(OC::$SERVERROOT.'/tests/data/testimage.jpg'));
|
||||||
ob_start();
|
ob_start();
|
||||||
imagejpeg($raw);
|
imagejpeg($raw);
|
||||||
|
|
Loading…
Reference in New Issue