@@ -83,7 +83,7 @@ public function __clone()
83
83
84
84
85
85
/**
86
- * Уничожает изображение, в том числе уничтожает его ресурс.
86
+ * Уничтожает изображение, в том числе уничтожает его ресурс.
87
87
*/
88
88
public function __destruct ()
89
89
{
@@ -138,7 +138,7 @@ public function getRecommendedExtension( $includeDot = false )
138
138
139
139
140
140
/**
141
- * Изменяет размер изображения.
141
+ * Изменяет размер изображения. Создаётся копия, текущий объект не модифицируется.
142
142
*
143
143
* @param int|null $width Желаемая ширина изображения. Если null, то будет рассчитана из высоты с сохранением
144
144
* пропорций. Нужно обязательно указать ширину и/или высоту.
@@ -154,7 +154,7 @@ public function getRecommendedExtension( $includeDot = false )
154
154
* @param float $alignVer Положение изображения по вертикали при обрезке (от 0 (виден верхний край) до 1 (виден
155
155
* нижний край)). Влияет только если указаны ширина и высота и значение и значение аргумента $sizing равно
156
156
* Image::SIZING_COVER.
157
- * @return static Сам себя
157
+ * @return static Изображение с изменённым размером
158
158
* @throws \Exception Если не удалось изменить размер
159
159
*
160
160
* @see Image::SIZING_CONTAIN
@@ -216,19 +216,18 @@ function resize(
216
216
$ params [ 'dstWidth ' ], $ params [ 'dstHeight ' ],
217
217
$ params [ 'srcWidth ' ], $ params [ 'srcHeight ' ] );
218
218
imagealphablending ( $ bitmap , true );
219
- imagedestroy ( $ this ->bitmap );
220
219
221
220
if ( !$ result )
222
221
throw new \Exception ( 'Не удалось изменить размер изображения по неизвестной причине. ' );
223
222
224
- $ this -> bitmap = $ bitmap ;
225
-
226
- return $ this ;
223
+ $ newImage = static :: construct ( $ bitmap ) ;
224
+ $ newImage -> isTransparent = $ this -> isTransparent ;
225
+ return $ newImage ;
227
226
}
228
227
229
228
230
229
/**
231
- * Пишет текст на изображении.
230
+ * Пишет текст на изображении. Создаётся копия, текущий объект не модифицируется.
232
231
*
233
232
* @param string $text Текст, который нужно написать
234
233
* @param string $font Путь к файлу шрифта, которым нужно сделать надпись, на сервере
@@ -241,7 +240,7 @@ function resize(
241
240
* @param float $alignVer Положение текста по вертикали (от 0 (снизу от указанной точки) до 1 (сверху от указанной
242
241
* точки))
243
242
* @param float $angle Угол поворота текста в градусах (против часовой стрелки)
244
- * @return static Сам себя
243
+ * @return static Изображение с надписью
245
244
* @throws \Exception Если не удалось поместить текст
246
245
*/
247
246
function write (
@@ -261,16 +260,19 @@ function write(
261
260
$ x -= $ width * $ alignHor ;
262
261
$ y -= $ height * $ alignVer ;
263
262
$ color = static ::allocateColor ( $ this ->bitmap , $ color );
263
+ $ bitmap = $ this ->toResource ();
264
264
265
- if ( !imagettftext ( $ this -> bitmap , $ fontSize , $ angle , $ x , $ y , $ color , $ font , $ text ) )
265
+ if ( !imagettftext ( $ bitmap , $ fontSize , $ angle , $ x , $ y , $ color , $ font , $ text ) )
266
266
throw new \Exception ( 'Не поместить текст на изображении по неизвестной причине. ' );
267
267
268
- return $ this ;
268
+ $ newImage = static ::construct ( $ bitmap );
269
+ $ newImage ->isTransparent = $ this ->isTransparent ;
270
+ return $ newImage ;
269
271
}
270
272
271
273
272
274
/**
273
- * Вставляет указанное изображение в текущее.
275
+ * Вставляет указанное изображение в текущее. Создаётся копия, текущий объект не модифицируется.
274
276
*
275
277
* @param self $image Вставляемое изображение
276
278
* @param int $dstX Координата X на текущем изображении, куда вставить новое. По умолчанию, 0.
@@ -281,7 +283,7 @@ function write(
281
283
* @param int|null $dstHeight Новая Высота вставляемой области. Если null, то не меняется.
282
284
* @param int|null $srcWidth Ширина вставляемой области вставляемого изображения. Если null, то вся ширина изображения.
283
285
* @param int|null $srcHeight Высота вставляемой области вставляемого изображения. Если null, то вся высота изображения.
284
- * @return static Сам себя
286
+ * @return static Текущее изображение с вставленным
285
287
* @throws \Exception Если не удалось вставить изображение
286
288
*/
287
289
function insertImage (
@@ -307,8 +309,10 @@ function insertImage(
307
309
if ( !is_numeric ( $ dstWidth ) ) $ dstWidth = $ srcWidth ;
308
310
if ( !is_numeric ( $ dstHeight ) ) $ dstHeight = $ srcHeight ;
309
311
312
+ $ bitmap = $ this ->toResource ();
313
+
310
314
$ result = imagecopyresampled (
311
- $ this -> bitmap ,
315
+ $ bitmap ,
312
316
$ image ->bitmap ,
313
317
$ dstX , $ dstY ,
314
318
$ srcX , $ srcY ,
@@ -319,17 +323,19 @@ function insertImage(
319
323
if ( !$ result )
320
324
throw new \Exception ( 'Не удалось вставить изображение по неизвестной причине. ' );
321
325
322
- return $ this ;
326
+ $ newImage = static ::construct ( $ bitmap );
327
+ $ newImage ->isTransparent = $ this ->isTransparent ;
328
+ return $ newImage ;
323
329
}
324
330
325
331
326
332
/**
327
- * Вращает изображение.
333
+ * Вращает изображение. Создаётся копия, текущий объект не модифицируется.
328
334
*
329
335
* @param float $angle Угол, выраженный в градусах, против часовой стрелки
330
336
* @param int[]|null $color Цвет фона (массив с индексами r, g, b и по желанию a). Фон появляется, если изображение
331
337
* повёрнуто на угол, не кратный 90°.
332
- * @return static Сам себя
338
+ * @return static Повёрнутое изображение
333
339
* @throws \Exception Если не удалось повернуть изображение
334
340
*/
335
341
function rotate ( $ angle , Array $ underlay = null )
@@ -339,10 +345,9 @@ function rotate( $angle, Array $underlay = null )
339
345
if ( !$ bitmap )
340
346
throw new \Exception ( 'Не удалось повернуть изображение по неизвестной причине. ' );
341
347
342
- imagedestroy ( $ this ->bitmap );
343
- $ this ->bitmap = $ bitmap ;
344
-
345
- return $ this ;
348
+ $ newImage = static ::construct ( $ bitmap );
349
+ $ newImage ->isTransparent = $ this ->isTransparent ;
350
+ return $ newImage ;
346
351
}
347
352
348
353
@@ -643,6 +648,19 @@ public static function allocateColor( $bitmap, Array $color = null )
643
648
}
644
649
645
650
651
+ /**
652
+ * Создаёт объект своего класса. Нужен для возможности безопасного изменения аргументов конструктора в дочерних
653
+ * классах.
654
+ *
655
+ * @see Image::__constructor
656
+ * @return static
657
+ */
658
+ protected static function construct ( $ bitmap )
659
+ {
660
+ return new static ( $ bitmap );
661
+ }
662
+
663
+
646
664
/**
647
665
* Рассчитывает параметры масштабирования изображения.
648
666
*
0 commit comments