使用PHP在图像上缩放水印

时间:2014-04-30 16:19:44

标签: php html resize scale watermark

我正在研究将水印放在图像上的php功能。我有它工作但我需要缩放这个水印,所以水印的高度将是原始图像的1/3。我可以这样做,但是当我把它放到我的代码中时它只是不起作用,因为imagecopymerge的参数必须是资源,我不知道是什么意思。

define('WATERMARK_OVERLAY_IMAGE', 'watermark.png');
define('WATERMARK_OVERLAY_OPACITY', 100);
define('WATERMARK_OUTPUT_QUALITY', 100);

function create_watermark($source_file_path, $output_file_path)
{
list($source_width, $source_height, $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;
}
$overlay_gd_image = imagecreatefrompng(WATERMARK_OVERLAY_IMAGE);
$overlay_width = imagesx($overlay_gd_image);
$overlay_height = imagesy($overlay_gd_image);

//THIS PART IS WHAT SHOULD RESIZE THE WATERMARK
$source_width = imagesx($source_gd_image);
$source_height = imagesy($source_gd_image);

$percent = $source_height/3/$overlay_height;

// Get new sizes
$new_overlay_width = $overlay_width * $percent;
$new_overlay_height = $overlay_height * $percent;
// Load
$overlay_gd_image_resized = imagecreatetruecolor($new_overlay_width, $new_overlay_height);
// Resize
$overlay_gd_image_complet = imagecopyresized($overlay_gd_image_resized, $overlay_gd_image, 0, 0, 0, 0, $new_overlay_width, $new_overlay_height, $overlay_width, $overlay_height);


//ALIGN BOTTOM, RIGHT
if (isset($_POST['kde']) && $_POST['kde'] == 'pravo') {
imagecopymerge(
    $source_gd_image,
    $overlay_gd_image_complet,
    $source_width - $new_overlay_width,
    $source_height - $new_overlay_height,
    0,
    0,
    $new_overlay_width,
    $new_overlay_height,
    WATERMARK_OVERLAY_OPACITY
);
}
if (isset($_POST['kde']) && $_POST['kde'] == 'levo') {
//ALIGN BOTTOM, LEFT
imagecopymerge(
    $source_gd_image,
    $overlay_gd_image,
    0,
    $source_height - $overlay_height,
    0,
    0,
    $overlay_width,
    $overlay_height,
    WATERMARK_OVERLAY_OPACITY
);
}
imagejpeg($source_gd_image, $output_file_path, WATERMARK_OUTPUT_QUALITY);
imagedestroy($source_gd_image);
imagedestroy($overlay_gd_image);
imagedestroy($overlay_gd_image_resized);
}
/*
 * Uploaded file processing function
 */

define('UPLOADED_IMAGE_DESTINATION', 'originals/');
define('PROCESSED_IMAGE_DESTINATION', 'images/');

function process_image_upload($Field)
{
$temp_file_path = $_FILES[$Field]['tmp_name'];
/*$temp_file_name = $_FILES[$Field]['name'];*/
$temp_file_name = md5(uniqid(rand(), true)) . '.jpg';

list(, , $temp_type) = getimagesize($temp_file_path);
if ($temp_type === NULL) {
    return false;
}
switch ($temp_type) {
    case IMAGETYPE_GIF:
        break;
    case IMAGETYPE_JPEG:
        break;
    case IMAGETYPE_PNG:
        break;
    default:
        return false;
}
$uploaded_file_path = UPLOADED_IMAGE_DESTINATION . $temp_file_name;
$processed_file_path = PROCESSED_IMAGE_DESTINATION . preg_replace('/\\.[^\\.]+$/', '.jpg', $temp_file_name);
move_uploaded_file($temp_file_path, $uploaded_file_path);
$result = create_watermark($uploaded_file_path, $processed_file_path);
if ($result === false) {
    return false;
} else {
    return array($uploaded_file_path, $processed_file_path);
}
}

$result = process_image_upload('File1');
if ($result === false) {
echo '<br>An error occurred during file processing.';
} else {
/*echo '<br>Original image saved as <a href="' . $result[0] . '" target="_blank">' . $result[0] . '</a>';*/
echo '<br>Odkaz na obrazek je <a href="' . $result[1] . '" target="_blank">zde</a>';
echo '<br><img src="' . $result[1] . '" width="500px">';
echo '<br><div class="fb-share-button" data-href="' . $result[1] . '" data-type="button"></div>';
}

0 个答案:

没有答案