3

ユーザーがアートワークをさまざまなサイズでアップロードして販売できるようにする Web サイトに取り組んでいます。さまざまなファイルサイズを自動的に処理する最善の方法は何だろうと思っていました。私が興味を持ったいくつかのポイント:

  • 比例した寸法で画像のサイズを動的に変更できるように、さまざまなサイズのカテゴリ (小、中、大) を定義する方法。

  • ダウンロード用にさまざまなサイズの実際の jpeg を保存する必要がありますか? または、その場でダウンロードするためにこれらの異なるサイズを生成する方が簡単でしょうか?

  • 私のサムネイルは平均的なサムネイルよりも多少大きくなります。サイトの透かしがオーバーレイされた 2 番目の「サムネイル画像」を保存する必要がありますか? またはもう一度、その場でこれを生成しますか?

すべての意見、アドバイスは大歓迎です!

4

2 に答える 2

2

私はaarongriffin.co.ukでこのようなことをしています。

そこでは、一部の画像は、最初に要求されたときにその場でサイズ変更され、その後保存されます。他のものはアップロード時に生成されます。グループで要求される傾向のある画像 (つまり、サムネイル) はアップロード時に生成され、一度に 1 つずつ表示される傾向のある画像はその場で生成されます。これは私にとってはうまくいきましたが、トラフィックが多すぎるサイトではありません.

私は Python と Django で作業しているので、これには sorl-thumbnail を使用します。PHP では、同じことを (一種の) 行うさまざまな imagecreatefrom* 関数にアクセスできます。

透かしを入れたバージョンの写真を生成し (特定のアルバムに透かしを入れる必要がある場合)、透かしのないコピーの代わりにそれらを保存します。

于 2010-05-17T05:35:54.663 に答える
1

これについては、PHPのサムネイルを確認できます。役に立つかもしれないコードスニペットを次に示します。

<?php
# Constants
define(IMAGE_BASE, '/var/www/html/mbailey/images');
define(MAX_WIDTH, 150);
define(MAX_HEIGHT, 150);

# Get image location
$image_file = str_replace('..', '', $_SERVER['QUERY_STRING']);
$image_path = IMAGE_BASE . "/$image_file";

# Load image
$img = null;
$ext = strtolower(end(explode('.', $image_path)));
if ($ext == 'jpg' || $ext == 'jpeg') {
    $img = @imagecreatefromjpeg($image_path);
} else if ($ext == 'png') {
    $img = @imagecreatefrompng($image_path);
# Only if your version of GD includes GIF support
} else if ($ext == 'gif') {
    $img = @imagecreatefrompng($image_path);
}

# If an image was successfully loaded, test the image for size
if ($img) {

    # Get image size and scale ratio
    $width = imagesx($img);
    $height = imagesy($img);
    $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);

    # If the image is larger than the max shrink it
    if ($scale &lt; 1) {
        $new_width = floor($scale*$width);
        $new_height = floor($scale*$height);

        # Create a new temporary image
        $tmp_img = imagecreatetruecolor($new_width, $new_height);

        # Copy and resize old image into new image
        imagecopyresized($tmp_img, $img, 0, 0, 0, 0,
                         $new_width, $new_height, $width, $height);
        imagedestroy($img);
        $img = $tmp_img;
    }
}

# Create error image if necessary
if (!$img) {
    $img = imagecreate(MAX_WIDTH, MAX_HEIGHT);
    imagecolorallocate($img,0,0,0);
    $c = imagecolorallocate($img,70,70,70);
    imageline($img,0,0,MAX_WIDTH,MAX_HEIGHT,$c2);
    imageline($img,MAX_WIDTH,0,0,MAX_HEIGHT,$c2);
}

# Display the image
header("Content-type: image/jpeg");
imagejpeg($img);
?>
于 2010-05-17T05:33:42.487 に答える