Back to PhocaGalleryImageBgImage class

Method createBgImage

public static
createBgImage
(mixed $data, mixed &$errorMsg)

Method createBgImage - Source code

public static function createBgImage($data, &$errorMsg)
{
    $params = ComponentHelper::getParams('com_phocagallery');
    $jfile_thumbs = $params->get('jfile_thumbs', 1);
    $jpeg_quality = $params->get('jpeg_quality', 85);
    $jpeg_quality = PhocaGalleryImage::getJpegQuality($jpeg_quality);
    $formatIcon = 'png';
    $path = PhocaGalleryPath::getPath();
    $fileIn = $fileOut = $path->image_abs_front . $data['image'] . '.' . $formatIcon;
    if ($fileIn !== '' && File::exists($fileIn)) {
        $memory = 8;
        $memoryLimitChanged = 0;
        $memory = (int) ini_get('memory_limit');
        if ($memory == 0) {
            $memory = 8;
        }
        // Try to increase memory
        if ($memory < 50) {
            ini_set('memory_limit', '50M');
            $memoryLimitChanged = 1;
        }
        $imageWidth = $data['iw'];
        $imageHeight = $data['ih'];
        $completeImageWidth = $imageWidth + 18;
        $completeImageHeight = $imageHeight + 18;
        $completeImageBackground = $data['sbgc'];
        $retangleColor = $data['ibgc'];
        $borderColor = $data['ibrdc'];
        $shadowColor = $data['iec'];
        $effect = $data['ie'];
        // shadow or glow
        $imgX = 6;
        $imgWX = $imageWidth + 5 + $imgX;
        // Image Width + space (padding) + Start Position
        $imgY = 6;
        $imgHY = $imageHeight + 5 + $imgY;
        $brdX = $imgX - 1;
        $brdWX = $imgWX + 1;
        $brdY = $imgY - 1;
        $brdHY = $imgHY + 1;
        // Crate an image
        $img = @imagecreatetruecolor($completeImageWidth, $completeImageHeight);
        if (!$img) {
            $errorMsg = 'ErrorNoImageCreateTruecolor';
            return false;
        }
        if ($completeImageBackground == '') {
            switch ($formatIcon) {
                case 'jpg':
                case 'jpeg':
                case 'gif':
                    $completeImageBackground = '#ffffff';
                    break;
                case 'png':
                case 'webp':
                    @imagealphablending($img, false);
                    imagefilledrectangle($img, 0, 0, $completeImageWidth, $completeImageHeight, imagecolorallocatealpha($img, 255, 255, 255, 127));
                    @imagealphablending($img, true);
                    break;
            }
        } else {
            $bGClr = PhocaGalleryUtils::htmlToRgb($completeImageBackground);
            imagefilledrectangle($img, 0, 0, $completeImageWidth, $completeImageHeight, imagecolorallocate($img, $bGClr[0], $bGClr[1], $bGClr[2]));
        }
        // Create Retangle
        if ($retangleColor != '') {
            $rtgClr = PhocaGalleryUtils::htmlToRgb($retangleColor);
            $retangle = imagecolorallocate($img, $rtgClr[0], $rtgClr[1], $rtgClr[2]);
        }
        // Create Border
        if ($borderColor != '') {
            $brdClr = PhocaGalleryUtils::htmlToRgb($borderColor);
            $border = imagecolorallocate($img, $brdClr[0], $brdClr[1], $brdClr[2]);
        }
        // Effect (shadow,glow)
        if ((int) $effect > 0) {
            if ($shadowColor != '') {
                $shdClr = PhocaGalleryUtils::htmlToRgb($shadowColor);
                if ((int) $effect == 3) {
                    $shdX = $brdX - 1;
                    $shdY = $brdY - 1;
                    $effectArray = array(55, 70, 85, 100, 115);
                } else {
                    if ((int) $effect == 2) {
                        $shdX = $brdX + 3;
                        $shdY = $brdY + 3;
                        $effectArray = array(50, 70, 90, 110);
                    } else {
                        $shdX = $brdX + 3;
                        $shdY = $brdY + 3;
                        $effectArray = array(0, 0, 0, 0);
                    }
                }
                $shdWX = $brdWX + 1;
                $shdHY = $brdHY + 1;
                foreach ($effectArray as $key => $value) {
                    $effectImg = @imagecolorallocatealpha($img, $shdClr[0], $shdClr[1], $shdClr[2], $value);
                    if (!$effectImg) {
                        $errorMsg = 'ErrorNoImageColorAllocateAlpha';
                        return false;
                    }
                    imagerectangle($img, $shdX, $shdY, $shdWX, $shdHY, $effectImg);
                    if ((int) $effect == 3) {
                        $shdX--;
                        $shdY--;
                    } else {
                        if ((int) $effect == 2) {
                            $shdX++;
                            $shdY++;
                        } else {
                            //$shdX++;
                            //$shdY++;
                        }
                    }
                    $shdWX++;
                    $shdHY++;
                }
            }
        }
        // Write Rectangle over the shadow
        if ($retangleColor != '') {
            imagefilledrectangle($img, $imgX, $imgY, $imgWX, $imgHY, $retangle);
        }
        if ($borderColor != '') {
            imagerectangle($img, $brdX, $brdY, $brdWX, $brdHY, $border);
        }
        switch ($formatIcon) {
            case 'jpg':
            case 'jpeg':
                if (!function_exists('ImageJPEG')) {
                    $errorMsg = 'ErrorNoJPGFunction';
                    return false;
                }
                if ($jfile_thumbs == 1) {
                    ob_start();
                    if (!@ImageJPEG($img, NULL, $jpeg_quality)) {
                        ob_end_clean();
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                    $imgJPEGToWrite = ob_get_contents();
                    ob_end_clean();
                    if (!File::write($fileOut, $imgJPEGToWrite)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                } else {
                    if (!@ImageJPEG($img, $fileOut, $jpeg_quality)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                }
                break;
            case 'png':
                if (!function_exists('ImagePNG')) {
                    $errorMsg = 'ErrorNoPNGFunction';
                    return false;
                }
                @imagesavealpha($img, true);
                if ($jfile_thumbs == 1) {
                    ob_start();
                    if (!@ImagePNG($img, NULL)) {
                        ob_end_clean();
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                    $imgPNGToWrite = ob_get_contents();
                    ob_end_clean();
                    if (!File::write($fileOut, $imgPNGToWrite)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                } else {
                    if (!@ImagePNG($img, $fileOut)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                }
                break;
            case 'gif':
                if (!function_exists('ImageGIF')) {
                    $errorMsg = 'ErrorNoGIFFunction';
                    return false;
                }
                if ($jfile_thumbs == 1) {
                    ob_start();
                    if (!@ImageGIF($img, NULL)) {
                        ob_end_clean();
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                    $imgGIFToWrite = ob_get_contents();
                    ob_end_clean();
                    if (!File::write($fileOut, $imgGIFToWrite)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                } else {
                    if (!@ImageGIF($img, $fileOut)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                }
                break;
            case 'webp':
                if (!function_exists('ImageWebp')) {
                    $errorMsg = 'ErrorNoWEBPFunction';
                    return false;
                }
                @imagesavealpha($img, true);
                if ($jfile_thumbs == 1) {
                    ob_start();
                    if (!@imagewebp($img, NULL)) {
                        ob_end_clean();
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                    $imgWEBPToWrite = ob_get_contents();
                    ob_end_clean();
                    if (!File::write($fileOut, $imgWEBPToWrite)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                } else {
                    if (!@imagewebp($img, $fileOut)) {
                        $errorMsg = 'ErrorWriteFile';
                        return false;
                    }
                }
                break;
            default:
                $errorMsg = 'ErrorNotSupportedImage';
                return false;
                break;
        }
        // free memory
        ImageDestroy($img);
        // Original
        if ($memoryLimitChanged == 1) {
            $memoryString = $memory . 'M';
            ini_set('memory_limit', $memoryString);
        }
        return true;
        // Success
    }
    $errorMsg = 'Error2';
    return false;
}