1: <?php
2: /**
3: ##DOC-SIGNATURE##
4:
5: This file is part of WideImage.
6:
7: WideImage is free software; you can redistribute it and/or modify
8: it under the terms of the GNU Lesser General Public License as published by
9: the Free Software Foundation; either version 2.1 of the License, or
10: (at your option) any later version.
11:
12: WideImage is distributed in the hope that it will be useful,
13: but WITHOUT ANY WARRANTY; without even the implied warranty of
14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: GNU Lesser General Public License for more details.
16:
17: You should have received a copy of the GNU Lesser General Public License
18: along with WideImage; if not, write to the Free Software
19: Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20:
21: * @package Internal/Operations
22: **/
23:
24: namespace WideImage\Operation;
25:
26: use WideImage\Coordinate;
27: use WideImage\Exception\GDFunctionResultException;
28:
29: /**
30: * Merge operation class
31: *
32: * @package Internal/Operations
33: */
34: class Merge
35: {
36: /**
37: * Returns a merged image
38: *
39: * @param \WideImage\Image $base
40: * @param \WideImage\Image $overlay
41: * @param smart_coordinate $left
42: * @param smart_coordinate $top
43: * @param numeric $pct
44: * @return \WideImage\Image
45: */
46: public function execute($base, $overlay, $left, $top, $pct)
47: {
48: $x = Coordinate::fix($left, $base->getWidth(), $overlay->getWidth());
49: $y = Coordinate::fix($top, $base->getHeight(), $overlay->getHeight());
50:
51: $result = $base->asTrueColor();
52: $result->alphaBlending(true);
53: $result->saveAlpha(true);
54:
55: if ($pct <= 0) {
56: return $result;
57: }
58:
59: if ($pct < 100) {
60: if (!imagecopymerge(
61: $result->getHandle(),
62: $overlay->getHandle(),
63: $x, $y, 0, 0,
64: $overlay->getWidth(),
65: $overlay->getHeight(),
66: $pct)) {
67: throw new GDFunctionResultException("imagecopymerge() returned false");
68: }
69: } else {
70: if (!imagecopy(
71: $result->getHandle(),
72: $overlay->getHandle(),
73: $x, $y, 0, 0,
74: $overlay->getWidth(),
75: $overlay->getHeight())) {
76: throw new GDFunctionResultException("imagecopy() returned false");
77: }
78: }
79:
80: return $result;
81: }
82: }
83: