3

私の写真のサイズはさまざまで、横向き、縦向き、正方形のいずれかです。透かしを各写真に最適にする必要があります。長い長方形なので、透かしの幅だけをサイズ変更する必要があります(Imagickなし)。 、高さは関係ありません。

PHP関数を見つけましたが、imagecopyresized正直なところ、PHPのドキュメントを見た後でも、自分の状況に必要なパラメーターを理解することはできません。また、imagecopyresizedを使用した後、透かしの幅と高さを取得する場所で関数の残りの部分が機能するかどうかもわかりません。

誰かが私がフィニッシュラインを乗り越えるのを手伝ってくれませんか。これが私が得た距離です。必要なのは、imagecopyresizedパーツに追加された適切なパラメータだけです。

<?php

header('content-type: image/jpeg');

$image = imagecreatefromjpeg('https://.....jpg');
$imageSize = getimagesize('https://.....jpg');

$newWatermarkWidth = $imageSize[0]-50; // width of image minus 50px
$watermark = imagecreatefrompng('watermark.png');

// resize watermark to newWatermarkWidth here with imagecopyresize
$watermark = imagecopyresized(?,?,?,?);

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

$dest_x = ($imageSize[0]/2) - ($watermark_width/2) ;
$dest_y = ($imageSize[1]/2) - ($watermark_height/2);

imagecopy($image, $watermark, round($dest_x,0), round($dest_y,0), 0, 0, $watermark_width, $watermark_height);
imagejpeg($image);
imagedestroy($image);
imagedestroy($watermark);

?>

これが私が終わらせたものであり、完璧に機能します

透かしの幅を調整して、親画像全体に収まるように、中央に比例して配置するスクリプト。

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

$image = imagecreatefromjpeg('http://mydomain.com/myPhoto.jpg');
$imageSize = getimagesize('http://mydomain.com/myPhoto.jpg');

$watermark = imagecreatefrompng('http://mydomain.com/myWatermark.png');

$watermark_o_width = imagesx($watermark);
$watermark_o_height = imagesy($watermark);

$newWatermarkWidth = $imageSize[0]-20;
$newWatermarkHeight = $watermark_o_height * $newWatermarkWidth / $watermark_o_width;

imagecopyresized($image, $watermark, $imageSize[0]/2 - $newWatermarkWidth/2, $imageSize[1]/2 - $newWatermarkHeight/2, 0, 0, $newWatermarkWidth, $newWatermarkHeight, imagesx($watermark), imagesy($watermark));

imagejpeg($image);

imagedestroy($image);
imagedestroy($watermark);
4

1 に答える 1

2

これにより、透かしのサイズが変更され、画像に直接コピーされます。

既存の imagecopy 行はもう必要ありません。

$success = imagecopyresized($image,                 // Destination image
           $watermark,                              // Source image
           $imageSize[0]/2 - $newWatermarkWidth/2,  // Destination X
           $imageSize[1]/2 - imagesy($watermark)/2, // Destination Y
           0,                                       // Source X
           0,                                       // Source Y
           $newWatermarkWidth,                      // Destination W
           imagesy($watermark),                     // Destination H
           imagesx($watermark),                     // Source W
           imagesy($watermark));                    // Source H
于 2012-07-27T18:43:48.323 に答える