0

PHP を使用して画像に角丸を適用することに関するこのブログ記事を見ました: http://salman-w.blogspot.ca/2009/05/generate-images-with-round-corners-on.html

そして、コードは以下です

<?php
/*
 * Apply Round Corner PHP-GD
 * http://salman-w.blogspot.com/2009/05/generate-images-with-round-corners-on.html
 *
 * Adds rounded corners to the specified image
 */

/*
 * source: path or url of a gif/jpeg/png image -- php fopen url wrapper must be enabled if using url
 * radius: corner radius in pixels -- default value is 10
 * colour: corner colour in rgb hex format -- default value is FFFFFF
 */

$source = $_GET["source"];
$radius = isset($_GET["radius"]) ? $_GET["radius"] : 10;
$colour = isset($_GET["colour"]) ? $_GET["colour"] : "FFFFFF";

/*
 * open source image and calculate properties
 */

list($source_width, $source_height, $source_type) = getimagesize($source);
switch ($source_type) {
    case IMAGETYPE_GIF:
        $source_image = imagecreatefromgif($source);
        break;
    case IMAGETYPE_JPEG:
        $source_image = imagecreatefromjpeg($source);
        break;
    case IMAGETYPE_PNG:
        $source_image = imagecreatefrompng($source);
        break;
}

/*
 * create mask for top-left corner in memory
 */

$corner_image = imagecreatetruecolor(
    $radius,
    $radius
);

$clear_colour = imagecolorallocate(
    $corner_image,
    0,
    0,
    0
);

$solid_colour = imagecolorallocate(
    $corner_image,
    hexdec(substr($colour, 0, 2)),
    hexdec(substr($colour, 2, 2)),
    hexdec(substr($colour, 4, 2))
);

imagecolortransparent(
    $corner_image,
    $clear_colour
);

imagefill(
    $corner_image,
    0,
    0,
    $solid_colour
);

imagefilledellipse(
    $corner_image,
    $radius,
    $radius,
    $radius * 2,
    $radius * 2,
    $clear_colour
);

/*
 * render the top-left, bottom-left, bottom-right, top-right corners by rotating and copying the mask
 */

imagecopymerge(
    $source_image,
    $corner_image,
    0,
    0,
    0,
    0,
    $radius,
    $radius,
    100
);

$corner_image = imagerotate($corner_image, 90, 0);

imagecopymerge(
    $source_image,
    $corner_image,
    0,
    $source_height - $radius,
    0,
    0,
    $radius,
    $radius,
    100
);

$corner_image = imagerotate($corner_image, 90, 0);

imagecopymerge(
    $source_image,
    $corner_image,
    $source_width - $radius,
    $source_height - $radius,
    0,
    0,
    $radius,
    $radius,
    100
);

$corner_image = imagerotate($corner_image, 90, 0);

imagecopymerge(
    $source_image,
    $corner_image,
    $source_width - $radius,
    0,
    0,
    0,
    $radius,
    $radius,
    100
);

/*
 * output the image -- revise this step according to your needs
 */

header("Content-type: image/png");
imagepng($source_image);
?>

私の質問は、html フォームを使用してアップロードした画像でこのコードをどのように使用すれば、丸角が既に適用された状態で画像が自動的に保存されるのでしょうか? すなわち。方法:

  1. アップロード/アップロードされた画像にコードを適用する
  2. ブラウザにフィードする代わりに、この画像をローカル ファイルに出力する
4

2 に答える 2

2

サーバー上のユーザーの画像にこの処理を適用しないことをお勧めします。設計要件が変更された場合、元の画像のコピーも保存しない限り、元に戻す方法はありません。CSS の border-radius プロパティを使用して同じ効果を得ることができます。

 <img src='/path/to/image.png' style='border-radius: 5px;'/>
于 2013-07-29T05:12:55.467 に答える