%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/converter/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/file/converter/PreviewImage.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2016 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\file\converter;
use humhub\modules\file\libs\ImageHelper;
use humhub\modules\file\Module;
use Imagine\Image\ImageInterface;
use Yii;
use humhub\modules\file\models\File;
use humhub\libs\Html;
use yii\imagine\Image;
/**
* PreviewImage Converter
*
* @since 1.2
* @author Luke
*/
class PreviewImage extends BaseConverter
{
/**
* @var ImageInterface
*/
private $_image;
/**
* @var ImageInterface
*/
private $_imageFile;
/**
* @inheritdoc
*/
public function init()
{
/** @var Module $module */
$module = Yii::$app->getModule('file');
$this->options['width'] = $module->imagePreviewMaxWidth;
$this->options['height'] = $module->imagePreviewMaxHeight;
parent::init();
}
/**
* @inheritdoc
*/
public function getId()
{
return 'preview-image';
}
/**
* @inheritdoc
*/
public function render($file = null)
{
if ($file) {
$this->applyFile($file);
}
return Html::img($this->getUrl(), ['class' => 'animated fadeIn', 'alt' => $this->getAltText()]);
}
protected function getAltText($file = null)
{
if ($file) {
return Html::encode($file->file_name);
} elseif ($this->file) {
return Html::encode($this->file->file_name);
}
return '';
}
/**
* @inheritdoc
*/
protected function convert($fileName)
{
try {
if (!is_file($this->file->store->get($fileName))) {
$image = Image::getImagine()->open($this->file->store->get());
ImageHelper::fixJpegOrientation($image, $this->file);
if ($image->getSize()->getHeight() > $this->options['height']) {
$image->resize($image->getSize()->heighten($this->options['height']));
}
if ($image->getSize()->getWidth() > $this->options['width']) {
$image->resize($image->getSize()->widen($this->options['width']));
}
$options = ['format' => 'png'];
if (!($image instanceof \Imagine\Gd\Image) && count($image->layers()) > 1) {
$options = ['format' => 'gif', 'animated' => true];
}
$image->save($this->file->store->get($fileName), $options);
}
} catch (\Exception $ex) {
Yii::warning('Could not convert file with id ' . $this->file->id . '. Error: ' . $ex->getMessage());
}
}
/**
* @inheritdoc
*/
protected function canConvert(File $file)
{
$originalFile = $file->store->get();
if (substr($file->mime_type, 0, 6) !== 'image/' || !is_file($originalFile)) {
return false;
}
return true;
}
/**
* @return int the image width or 0 if not valid
* @deprecated since 1.5
*/
public function getWidth()
{
if ($this->image !== null) {
return $this->image->getSize()->getWidth();
}
return 0;
}
/**
* @return int the image height or 0 if not valid
* @deprecated since 1.5
*/
public function getHeight()
{
if ($this->image !== null) {
return $this->image->getSize()->getHeight();
}
return 0;
}
/**
* @return ImageInterface
* @deprecated since 1.5
*/
public function getImage()
{
$fileName = $this->file->store->get($this->getFilename());
if ($this->_image === null || $fileName !== $this->_imageFile) {
$this->_image = Image::getImagine()->open($fileName);
$this->_imageFile = $fileName;
}
return $this->_image;
}
/**
* Returns the gallery link to the original file
*
* @param array $htmlOptions optional link html options
* @return string the link
*/
public function renderGalleryLink($htmlOptions = [])
{
return Html::a($this->render(), $this->file->getUrl(), array_merge($htmlOptions, ['data-ui-gallery' => 'gallery-' . $this->file->guid]));
}
}