Passed
Push — refactor_render ( 1be99d...7e011e )
by Mattia
09:18
created

Avatar::calculateHelmStandardDeviation()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 41
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 32
dl 0
loc 41
rs 9.408
c 0
b 0
f 0
cc 4
nc 6
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Minepic\Image\Sections;
6
7
use Minepic\Image\Components\Component;
8
use Minepic\Image\Components\Side;
9
use Minepic\Image\ImageSection;
10
use Minepic\Image\LayerValidator;
11
12
class Avatar extends ImageSection
13
{
14
    /**
15
     * Render avatar image.
16
     *
17
     * @param int $size Avatar size
18
     * @param string $type Section rendered
19
     *
20
     * @throws \Minepic\Image\Exceptions\ImageCreateFromPngFailedException
21
     * @throws \Minepic\Image\Exceptions\ImageResourceCreationFailedException
22
     * @throws \Minepic\Image\Exceptions\ImageTrueColorCreationFailedException
23
     */
24
    public function render(int $size = 0, string $type = Side::FRONT): void
25
    {
26
        if ($size <= 0 || $size > (int) env('MAX_AVATAR_SIZE')) {
27
            $size = (int) env('DEFAULT_AVATAR_SIZE');
28
        }
29
        // generate png from url/path
30
        $baseSkinImage = $this->createImageFromPng($this->skinPath);
31
        \imagealphablending($baseSkinImage, false);
32
        \imagesavealpha($baseSkinImage, true);
33
34
        // Sections Coordinates
35
        $headSide = Component::getHead()->getSideByIdentifier($type);
36
        $helmSide = Component::getHeadLayer()->getSideByIdentifier($type);
37
38
        $tmpImageResource = $this->emptyBaseImage($headSide->getWidth(), $headSide->getHeight());
39
        \imagecopy($tmpImageResource, $baseSkinImage, 0, 0, $headSide->getTopLeft()->getX(), $headSide->getTopLeft()->getY(), $headSide->getWidth(), $headSide->getHeight());
40
41
        // if all pixel have transparency or the colors are not the same
42
        if ((new LayerValidator())->check($baseSkinImage, $helmSide)) {
43
            \imagecopymerge_alpha(
44
                $tmpImageResource,
45
                $baseSkinImage,
46
                0,
47
                0,
48
                $helmSide->getTopLeft()->getX(),
49
                $helmSide->getTopLeft()->getY(),
50
                $headSide->getWidth(),
51
                $headSide->getHeight(),
52
                100
53
            );
54
        }
55
56
        $this->imgResource = $this->emptyBaseImage($size, $size);
57
        \imagecopyresized($this->imgResource, $tmpImageResource, 0, 0, 0, 0, $size, $size, $headSide->getWidth(), $headSide->getHeight());
58
    }
59
}
60