Exemple #1
0
/**
 * PNG ALPHA CHANNEL SUPPORT for imagecopymerge();
 * by Sina Salek
 *
 * Bugfix by Ralph Voigt (bug which causes it
 * to work only for $src_x = $src_y = 0.
 * Also, inverting opacity is not necessary.)
 * 08-JAN-2011
 *
 **/
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct, $dst_im_ext)
{
    if ($dst_im_ext == 'jpg' && $pct == 100) {
        imagealphablending($dst_im, true);
        imagealphablending($src_im, true);
        imagecopy($dst_im, $src_im, $dst_x, $dst_y, 0, 0, $src_w, $src_h);
    } else {
        $transparent_index = imagecolortransparent($dst_im);
        $colors_total = imagecolorstotal($dst_im);
        $cut = imagecreatetruecolor($src_w, $src_h);
        if ($transparent_index >= 0) {
            $transparent_color = imagecolorsforindex($dst_im, $transparent_index);
            $transparent_index = imagecolorallocatealpha($cut, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue'], 127);
            imagefill($cut, 0, 0, $transparent_index);
            imagecolortransparent($cut, $transparent_index);
        } else {
            $color = imagecolorallocatealpha($cut, 0, 0, 0, 127);
            imagefill($cut, 0, 0, $color);
        }
        if ($dst_im_ext == 'png') {
            imagealphablending($dst_im, false);
            imagesavealpha($dst_im, true);
        } else {
            if ($dst_im_ext !== 'jpg') {
                imagetruecolortopalette($dst_im, true, 255);
                imagesavealpha($dst_im, false);
            }
        }
        if ($dst_im_ext == 'png' && $colors_total == 0) {
            if ($pct < 100) {
                filter_opacity($src_im, $pct);
            }
            imagealphablending($dst_im, true);
            imagesavealpha($dst_im, true);
            imagecopy($dst_im, $src_im, $dst_x, $dst_y, 0, 0, $src_w, $src_h);
            imagealphablending($dst_im, false);
        } else {
            imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
            imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
            imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct);
        }
    }
    imagedestroy($cut);
    imagedestroy($src_im);
}
Exemple #2
0
function create_watermark($source_file_path, $output_file_path)
{
    list(, , $source_type) = getimagesize($source_file_path);
    if ($source_type === NULL) {
        return false;
    }
    switch ($source_type) {
        case IMAGETYPE_GIF:
            $source_gd_image = imagecreatefromgif($source_file_path);
            break;
        case IMAGETYPE_JPEG:
            $source_gd_image = imagecreatefromjpeg($source_file_path);
            break;
        case IMAGETYPE_PNG:
            $source_gd_image = imagecreatefrompng($source_file_path);
            break;
        default:
            return false;
    }
    list(, , $output_type) = getimagesize(WATERMARK_OVERLAY_IMAGE);
    if ($output_type === NULL) {
        return false;
    }
    switch ($output_type) {
        case IMAGETYPE_GIF:
            $overlay_gd_image = imagecreatefromgif(WATERMARK_OVERLAY_IMAGE);
            break;
        case IMAGETYPE_JPEG:
            $overlay_gd_image = imagecreatefromjpeg(WATERMARK_OVERLAY_IMAGE);
            break;
        case IMAGETYPE_PNG:
            $overlay_gd_image = imagecreatefrompng(WATERMARK_OVERLAY_IMAGE);
            imagealphablending($overlay_gd_image, true);
            break;
        default:
            return false;
    }
    filter_opacity($overlay_gd_image, WATERMARK_OVERLAY_OPACITY);
    $overlay_width = imagesx($overlay_gd_image);
    $overlay_height = imagesy($overlay_gd_image);
    $coordinates = explode(',', WATERMARK_OUTPUT_COORDINATES);
    $length = count($coordinates);
    for ($i = 0; $i < $length; $i = $i + 2) {
        imagecopy($source_gd_image, $overlay_gd_image, $coordinates[$i], $coordinates[$i + 1], 0, 0, $overlay_width, $overlay_height);
    }
    if ($source_type['mime'] == 'image/png') {
        imagepng($source_gd_image, $output_file_path);
    } else {
        imagejpeg($source_gd_image, $output_file_path, WATERMARK_OUTPUT_QUALITY);
    }
    imagedestroy($source_gd_image);
    imagedestroy($overlay_gd_image);
}