Including handling in OC_Image But also a preview provider Of course only works if your php actually supports webp Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>tags/v21.0.0beta7
@@ -1253,6 +1253,7 @@ return array( | |||
'OC\\Preview\\TXT' => $baseDir . '/lib/private/Preview/TXT.php', | |||
'OC\\Preview\\Watcher' => $baseDir . '/lib/private/Preview/Watcher.php', | |||
'OC\\Preview\\WatcherConnector' => $baseDir . '/lib/private/Preview/WatcherConnector.php', | |||
'OC\\Preview\\WebP' => $baseDir . '/lib/private/Preview/WebP.php', | |||
'OC\\Preview\\XBitmap' => $baseDir . '/lib/private/Preview/XBitmap.php', | |||
'OC\\RedisFactory' => $baseDir . '/lib/private/RedisFactory.php', | |||
'OC\\Remote\\Api\\ApiBase' => $baseDir . '/lib/private/Remote/Api/ApiBase.php', |
@@ -1282,6 +1282,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c | |||
'OC\\Preview\\TXT' => __DIR__ . '/../../..' . '/lib/private/Preview/TXT.php', | |||
'OC\\Preview\\Watcher' => __DIR__ . '/../../..' . '/lib/private/Preview/Watcher.php', | |||
'OC\\Preview\\WatcherConnector' => __DIR__ . '/../../..' . '/lib/private/Preview/WatcherConnector.php', | |||
'OC\\Preview\\WebP' => __DIR__ . '/../../..' . '/lib/private/Preview/WebP.php', | |||
'OC\\Preview\\XBitmap' => __DIR__ . '/../../..' . '/lib/private/Preview/XBitmap.php', | |||
'OC\\RedisFactory' => __DIR__ . '/../../..' . '/lib/private/RedisFactory.php', | |||
'OC\\Remote\\Api\\ApiBase' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/ApiBase.php', |
@@ -0,0 +1,42 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @author Roeland Jago Douma <roeland@famdouma.nl> | |||
* @author John Molakvoæ <skjnldsv@protonmail.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU Affero General Public License for more details. | |||
* | |||
* You should have received a copy of the GNU Affero General Public License | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace OC\Preview; | |||
use OCP\Files\FileInfo; | |||
class WebP extends Image { | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
public function getMimeType(): string { | |||
return '/image\/webp/'; | |||
} | |||
public function isAvailable(FileInfo $file): bool { | |||
return (bool)(imagetypes() && IMG_WEBP); | |||
} | |||
} |
@@ -58,7 +58,7 @@ class PreviewManager implements IPreview { | |||
/** @var Generator */ | |||
private $generator; | |||
/** @var GeneratorHelper */ | |||
private $helper; | |||
@@ -314,6 +314,7 @@ class PreviewManager implements IPreview { | |||
Preview\HEIC::class, | |||
Preview\XBitmap::class, | |||
Preview\Krita::class, | |||
Preview\WebP::class, | |||
]; | |||
$this->defaultProviders = $this->config->getSystemValue('enabledPreviewProviders', array_merge([ | |||
@@ -360,6 +361,7 @@ class PreviewManager implements IPreview { | |||
$this->registerCoreProvider(Preview\GIF::class, '/image\/gif/'); | |||
$this->registerCoreProvider(Preview\BMP::class, '/image\/bmp/'); | |||
$this->registerCoreProvider(Preview\XBitmap::class, '/image\/x-xbitmap/'); | |||
$this->registerCoreProvider(Preview\WebP::class, '/image\/webp/'); | |||
$this->registerCoreProvider(Preview\Krita::class, '/application\/x-krita/'); | |||
$this->registerCoreProvider(Preview\MP3::class, '/audio\/mpeg/'); | |||
$this->registerCoreProvider(Preview\OpenDocument::class, '/application\/vnd.oasis.opendocument.*/'); |
@@ -555,7 +555,7 @@ class OC_Image implements \OCP\IImage { | |||
*/ | |||
public function loadFromFile($imagePath = false) { | |||
// exif_imagetype throws "read error!" if file is less than 12 byte | |||
if (!@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) { | |||
if (is_bool($imagePath) || !@is_file($imagePath) || !file_exists($imagePath) || filesize($imagePath) < 12 || !is_readable($imagePath)) { | |||
return false; | |||
} | |||
$iType = exif_imagetype($imagePath); | |||
@@ -608,6 +608,13 @@ class OC_Image implements \OCP\IImage { | |||
case IMAGETYPE_BMP: | |||
$this->resource = $this->imagecreatefrombmp($imagePath); | |||
break; | |||
case IMAGETYPE_WEBP: | |||
if (imagetypes() & IMG_WEBP) { | |||
$this->resource = @imagecreatefromwebp($imagePath); | |||
} else { | |||
$this->logger->debug('OC_Image->loadFromFile, webp images not supported: ' . $imagePath, ['app' => 'core']); | |||
} | |||
break; | |||
/* | |||
case IMAGETYPE_TIFF_II: // (intel byte order) | |||
break; |