3

写真に透かしを入れるのにいくつかの歯が生える問題があります。透かし入りの写真の色が本来よりもくすんでいることを除けば、すべて正常に機能します-実際には非常に目立ちます.

透かしを入れるためにimagecopyresizedを使用しています。これにより、特に PNG-24 透かしを使用できるようになりますが、他の透かしは使用できません。readfile($url)をテストとして使用したばかりなので、通常は色が問題ないことがわかっており、写真は完璧です。

これが私のスクリプトです:

<?php

// get parent and watermark images & sizes
$image = imagecreatefromjpeg($url);
$imageSize = getimagesize($url);
$watermark = imagecreatefrompng('watermark.png');
$watermark_o_width = imagesx($watermark);
$watermark_o_height = imagesy($watermark);

// calculate new watermark width and position
if ($imageSize[0] > $imageSize[1] || $imageSize[0] == $imageSize[1]) {
    $leftPercent = 23;
} else {
    $leftPercent = 7;
}
$leftPixels = ($imageSize[0]/100)*$leftPercent;
$newWatermarkWidth = $imageSize[0]-$leftPixels;
$newWatermarkHeight = $watermark_o_height * ($newWatermarkWidth / $watermark_o_width);

// place watermark on parent image, centered and scaled
imagecopyresized(
    $image,
    $watermark,
    $imageSize[0]/2 - $newWatermarkWidth/2,
    $imageSize[1]/2 - $newWatermarkHeight/2,
    0,
    0,
    $newWatermarkWidth,
    $newWatermarkHeight,
    imagesx($watermark),
    imagesy($watermark)
);

// print
imagejpeg($image);

// destroy
imagedestroy($image);
imagedestroy($watermark);

?>

どうすればこれを防ぐことができますか? imagecreatetruecolorについて読んでいますが、問題は解決しますか? 私は「imagecreatetruecolor color loss photos」とバリエーションをグーグルで検索していますが、この問題について実際に話している人は誰もいません。この関数が必要な場合、このスクリプトのどこに追加しますか?

これは私にとって完全にスパナを投げかけたので、誰かがそれをどこに貼り付けるかを教えてくれることを望んでいます(文字通りではありません).

色落ちの一例です。プレビュー イメージは、サムネイルとまったく同じ色である必要があります。サムネイルはreadfile()を使用して作成されますが、プレビューはimagecreatefromjpegおよびimagecopresizedを使用して作成されます。

ここに画像の説明を入力

4

2 に答える 2

2

このサンプルコードは、画像と同じ特性を使用することで正常に機能します。

元のJPG:暗い背景; 美少女; 赤いドレス。透かしPNG:透明な背景; 文章; 灰色。

<?php

// Path the the requested file (clean up the value if needed)
$path = $url;

// Load image
$image = imagecreatefromjpeg($path);
$w = imagesx($image);
$h = imagesy($image);

// Load watermark
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);

// Merge watermark upon the original image (center center)
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh);

// Output the image to the browser
header('Content-type: image/jpeg');
imagejpeg($image);

// destroy both images
imagedestroy($image);
imagedestroy($watermark);

// kill script
exit();

?>


左:出力画像| 右:元の画像

スクリーンショット

ノート:

出力画像は、「オリジナル」->「PHP出力」->「GIMP」->「ここ」まで数回圧縮されました。

于 2012-07-29T05:51:00.993 に答える
0

多くのテストを行った結果、PHP の GD Image は透かしを入れる画像のカラー プロファイルをサポートしていないという結論に達しました。私は今 Imagick を使用していますが、色は完璧です。

于 2012-08-06T00:48:44.977 に答える