Exemplo n.º 1
0
function fn_watermark_create($source_filepath, $target_filepath, $is_detailed = false, $company_id = null, $generate_watermark = true)
{
    $original_abs_path = Storage::instance('images')->getAbsolutePath($source_filepath);
    list(, , , $original_abs_path) = fn_get_image_size($original_abs_path);
    if (!$generate_watermark) {
        Storage::instance('images')->put($target_filepath, array('file' => $original_abs_path, 'keep_origins' => true));
        return true;
    }
    $settings = fn_get_watermark_settings($company_id);
    if (empty($settings)) {
        return false;
    }
    list($settings['horizontal_position'], $settings['vertical_position']) = explode('_', $settings['position']);
    /** @var \Imagine\Image\ImagineInterface $imagine */
    $imagine = Tygh::$app['image'];
    try {
        $image = $imagine->open($original_abs_path);
        $image->usePalette(new \Imagine\Image\Palette\RGB());
        $filter = $imagine instanceof \Imagine\Gd\Imagine ? \Imagine\Image\ImageInterface::FILTER_UNDEFINED : \Imagine\Image\ImageInterface::FILTER_LANCZOS;
        if ($settings['type'] == WATERMARK_TYPE_GRAPHIC) {
            $watermark_image_file_path = false;
            if ($is_detailed) {
                if (!empty($settings['image_pair']['detailed']['absolute_path'])) {
                    $watermark_image_file_path = $settings['image_pair']['detailed']['absolute_path'];
                }
            } elseif (!empty($settings['image_pair']['icon']['absolute_path'])) {
                $watermark_image_file_path = $settings['image_pair']['icon']['absolute_path'];
            }
            if (!$watermark_image_file_path) {
                return false;
            }
            list(, , , $watermark_image_file_path) = fn_get_image_size($watermark_image_file_path);
            $watermark_image = $imagine->open($watermark_image_file_path);
            $watermark_image->usePalette(new \Imagine\Image\Palette\RGB());
            // Watermark image > canvas image
            $watermark_size = $watermark_image->getSize()->increase(WATERMARK_PADDING);
            if (!$image->getSize()->contains($watermark_size)) {
                $ratio = min(array($image->getSize()->getWidth() / $watermark_size->getWidth(), $image->getSize()->getHeight() / $watermark_size->getHeight()));
                $watermark_image->resize($watermark_size->scale($ratio), $filter);
            }
            $watermark_position = ImageHelper::positionLayerOnCanvas($image->getSize(), $watermark_image->getSize(), $settings['horizontal_position'], $settings['vertical_position'], new \Imagine\Image\Box(WATERMARK_PADDING, WATERMARK_PADDING));
            $image->paste($watermark_image, $watermark_position);
        } elseif ($settings['type'] == WATERMARK_TYPE_TEXT) {
            $font_path = Registry::get('config.dir.lib') . 'other/fonts/' . $settings['font'] . '.ttf';
            $font_size = $is_detailed ? $settings['font_size_detailed'] : $settings['font_size_icon'];
            $font_alpha_blend = 100;
            switch ($settings['font_color']) {
                case 'white':
                    $font_color = array(255, 255, 255);
                    break;
                case 'black':
                    $font_color = array(0, 0, 0);
                    break;
                case 'gray':
                    $font_color = array(120, 120, 120);
                    break;
                case 'clear_gray':
                default:
                    $font_color = array(120, 120, 120);
                    $font_alpha_blend = WATERMARK_FONT_ALPHA;
                    break;
            }
            $font = $imagine->font($font_path, $font_size, $image->palette()->color($font_color, $font_alpha_blend));
            $text_layer_size = ImageHelper::calculateTextSize($settings['text'], $font);
            $watermark_position = ImageHelper::positionLayerOnCanvas($image->getSize(), $text_layer_size, $settings['horizontal_position'], $settings['vertical_position'], new \Imagine\Image\Box(WATERMARK_PADDING, WATERMARK_PADDING));
            $image->draw()->text($settings['text'], $font, $watermark_position);
        }
        $settings = Settings::instance()->getValues('Thumbnails');
        $options = array('jpeg_quality' => $settings['jpeg_quality'], 'png_compression_level' => 9, 'filter' => $filter);
        if ($original_file_type = fn_get_image_extension(fn_get_mime_content_type($original_abs_path, false))) {
            $format = $original_file_type;
        } else {
            $format = 'png';
        }
        Storage::instance('images')->put($target_filepath, array('contents' => $image->get($format, $options)));
        return true;
    } catch (\Exception $e) {
        return false;
    }
}
Exemplo n.º 2
0
function fn_image_to_display($images, $image_width = 0, $image_height = 0)
{
    if (empty($images)) {
        return array();
    }
    $image_data = array();
    // image pair passed
    if (!empty($images['icon']) || !empty($images['detailed'])) {
        if (!empty($images['icon'])) {
            $original_width = $images['icon']['image_x'];
            $original_height = $images['icon']['image_y'];
            $image_path = $images['icon']['image_path'];
            $absolute_path = $images['icon']['absolute_path'];
            $relative_path = $images['icon']['relative_path'];
        } else {
            $original_width = $images['detailed']['image_x'];
            $original_height = $images['detailed']['image_y'];
            $image_path = $images['detailed']['image_path'];
            $absolute_path = $images['detailed']['absolute_path'];
            $relative_path = $images['detailed']['relative_path'];
        }
        $detailed_image_path = !empty($images['detailed']['image_path']) ? $images['detailed']['image_path'] : '';
        $alt = !empty($images['icon']['alt']) ? $images['icon']['alt'] : (!empty($images['detailed']['alt']) ? $images['detailed']['alt'] : '');
        // single image passed only
    } else {
        $original_width = $images['image_x'];
        $original_height = $images['image_y'];
        $image_path = $images['image_path'];
        $alt = $images['alt'];
        $detailed_image_path = '';
        $absolute_path = $images['absolute_path'];
        $relative_path = $images['relative_path'];
    }
    list($image_width, $image_height) = ImageHelper::originalProportionsFallback($original_width, $original_height, $image_width, $image_height);
    if (!empty($image_width) && !empty($relative_path) && !empty($absolute_path)) {
        $image_path = fn_generate_thumbnail($relative_path, $image_width, $image_height, Registry::get('config.tweaks.lazy_thumbnails'));
    } else {
        $image_width = $original_width;
        $image_height = $original_height;
    }
    if (!empty($image_path)) {
        $image_data = array('image_path' => $image_path, 'detailed_image_path' => $detailed_image_path, 'alt' => $alt, 'width' => $image_width, 'height' => $image_height, 'absolute_path' => $absolute_path, 'generate_image' => strpos($image_path, '&image_path=') !== false);
    }
    /**
     * Additionally processes image data
     *
     * @param array $image_data Image data
     * @param array $images     Array with initial images
     * @param $image_width Result image width
     * @param $image_height Result image height
     */
    fn_set_hook('image_to_display_post', $image_data, $images, $image_width, $image_height);
    return $image_data;
}
Exemplo n.º 3
0
/**
 * @return array List of supported image formats to be used as setting variants
 */
function fn_get_supported_image_format_variants()
{
    $formats = array('original' => __('same_as_source'));
    $supported_formats = ImageHelper::getSupportedFormats();
    if (in_array('jpg', $supported_formats)) {
        $formats['jpg'] = 'JPEG';
    }
    if (in_array('png', $supported_formats)) {
        $formats['png'] = 'PNG';
    }
    if (in_array('gif', $supported_formats)) {
        $formats['gif'] = 'GIF';
    }
    return $formats;
}