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; } }
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; }
/** * @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; }