0

以下のように透かし関数を作成しました:

index.php

<?php
include 'core.inc.php';

do_watermark('bg1.jpg', 'logo1.png');
?>

core.inc.php

<?php
header ( 'Content-type: image/jpeg' );

function do_watermark($source_image, $logo) {

$watermark = imagecreatefrompng ( $logo );
$watermark_width = imagesx ( $logo );
$watermark_height = imagesy ( $logo );

$image = imagecreatetruecolor ( $watermark_width, $watermark_height );
$image = imagecreatefromjpeg ( $source_image );

$image_size = getimagesize ( $source_image );

$x = $image_size [0] - $watermark_width - 10;
$y = $image_size [1] - $watermark_height - 10;

imagecopymerge ( $image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, 40 );
imagejpeg ( $image );
}
?>

しかし、 を呼び出すとdo_watermark('bg1.jpg', 'logo1.png')、何も表示されません。

bg1.jpglogo1.png一緒index.phpです。

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

通常、透かし画像は、透かしを入れる画像よりも小さくなりませんか? ソース イメージのサイズではなく、透かしのサイズになるように作業イメージを作成しました。それが本当に必要ですか? x 座標と y 座標についてはわかりません。透かしが大きいほど、透かしのサイズに応じて x と y が大きくなるため、右に移動し (上または下に?) なります。画像サイズと透かしサイズの両方の関数として (x と y) を配置することを考えます。

また、JPEG 画像と PNG 透かし用にハードコードされています。ファイル名または getimagesize() 呼び出し ('mime' エントリ) からイメージ タイプを取得できます。この方法でより柔軟にすることを検討してください。

于 2013-08-09T16:33:27.150 に答える
1

あなたが書いたコードには大きな問題がいくつかありましたが、これでうまくいくはずですが、あなたのコードと比較して何が間違っているかを確認してください。

<?php

function do_watermark($source_image, $logo) {

    $watermark      = imagecreatefrompng($logo);
    $watermark_width    = imagesx($watermark);
    $watermark_height   = imagesy($watermark);

    $image          = imagecreatefromjpeg($source_image);
    $image_width        = imagesx($image);
    $image_height       = imagesy($image);

    $x = $image_width - $watermark_width - 10;
    $y = $image_height - $watermark_height - 10;

    imagecopymerge($image, $watermark, $x, $y, 0, 0, $watermark_width, $watermark_height, 40 );

    header('Content-Type: image/jpeg');
    imagejpeg($image);

    imagedestroy($image);

}

?>
于 2013-08-09T16:32:48.167 に答える