当源图像的水印生成器出现时,忽略“ OutOfBoundsException”错误

时间:2018-08-05 22:03:32

标签: image yii2 watermark

Yii2和核心yii\imagine\Image类中,使用此命令时:

Image::watermark('image.jpg', 'watermark.jpg')->save('image.jpg');

如果水印的尺寸,源图像的生成者,则返回此错误:

Exception 'Imagine\Exception\OutOfBoundsException' with message 'Cannot paste image of the given size at the specified position, as it moves outside of the current image's box' 

很好。但是如何忽略此错误,所以将创建新图像,但隐藏并删除了图像框外部的水印部分。

1 个答案:

答案 0 :(得分:0)

不能忽略paste(ImageInterface $image, PointInterface $start);,这就是为什么要使用该名称调用它们的原因,从$size = $image->getSize(); if (!$this->getSize()->contains($size, $start)) { throw new OutOfBoundsException('Cannot paste image of the given size at the specified position, as it moves outside of the current image\'s box'); } 方法抛出异常的原因

Image::watermark
catch函数中调用的

。它是受限制且不允许的,因此您无法忽略它。

您可以忽略/抑制通知或警告,但是您可以try{ \yii\imagine\Image::watermark ( 'img/image.png' , 'img/logo.jpg' ); } catch (\Imagine\Exception\OutOfBoundsException $ex) { Yii::$app->session->setFlash('error',$ex->getMessage()) ; } 进行异常处理并采取措施将其纠正或向用户显示错误

Image::watermark

或者如果发生异常,则将水印图像的大小调整为小于基本图像的大小,然后再次调用EDIT

actionWatermark()

您可以在下面的内容中进行类似的操作,假设您在创建水印图像的地方有一个public function actionWatermark() { $image='image.jpg'; $watermark= 'watermark.jpg'; try { //call watermark function $this->watermark ($image,$watermark); } catch ( \Imagine\Exception\OutOfBoundsException $ex ) { $img = \yii\imagine\Image::getImagine (); //get the base image dimensions $size=$img->open ( $image )->getSize(); //resize the watermark image $resized=\yii\imagine\Image::resize ( $watermark , $size->getWidth () , $size->getHeight (),TRUE); //call again $this->watermark ($image,$resized); } } private function watermark($image,$watermark) { \yii\imagine\Image::watermark ( $image , $watermark )->save ( 'image.jpg' ); }

{{1}}