Странное поведение Imagick::cropImage()

257
24 августа 2017, 22:16

Вот код:

$bg = new Imagick('./resourses/back.png');
$b = $bg;
$b->cropImage(100, 50, 0, 40);
$b->writeImage('cropped.png');
$b = $bg;
$b->writeImage('test.png');

В файл cropped.png записывается обрезанная картинка, как и должно быть. В файл test.png должна записаться нетронутая картинка back.png, которая содержится в переменной $bg. Но в файл test.png записывается обрезанная картинка - ровно та же, что и в cropped.png. Почему это происходит?

Answer 1

Оператор присваивания

Исключением из обычного для PHP способа присваивания по значению явлаются объекты (object), которые, начиная с версии PHP 5, присваиваются по ссылке. Принудительно скопировать объекты по значению можно с помощью специального ключевого слова clone.

Т.е. вот тут $b = $bg; переменной $b присваивается ссылка на объект $bg и когда вы ее кропаете, то, по факту, кропается изображение в объекте $bg.

Вам нужно либо использовать clone, либо создавать два объекта.

READ ALSO
Как выбрать значение из массива PHP

Как выбрать значение из массива PHP

Потратил уже пол дня на эту "ошибку" и никак не могу найти решение, есть массив:

303
Class 'phpQuery' not found

Class 'phpQuery' not found

Пришлось перейти с PHP 56 на PHP 7, и после перехода вот такая ошибка:

247
Как исправить ошибку PHP Fatal error: Out of memory?

Как исправить ошибку PHP Fatal error: Out of memory?

ЗдравствуйтеУ меня не работает сервер - ошибка 502 в течение 25 минут, в логах вижу следующие:

305