0

次の問題があります。ユーザーは画像をアップロードできます。画像に歪みが生じないように、画像を約 5 倍小さく表示したいと思います。それは避けたいところです。元の画像の幅と高さを求めて 5 で割るにはどうすればよいですか?

私はphpを使用していますが、その詳細について言及するのを忘れていました。

よろしく、ゾラン

4

3 に答える 3

2

あなたのコメントの音から、得られた答えよりも単純なものを探しています。試しましたgetimagesizeか?http://php.net/manual/en/function.getimagesize.php

次のようなことができます。

$size = getimagesize($filename);
echo $size[0]/5; //width
echo $size[1]/5; //height

この方法には、GD などの画像ライブラリに依存する必要がないという利点もあります。

于 2013-01-26T11:29:37.530 に答える
0

画像のアップロードが完了したら、次の関数を使用します。

<?php

function generate_image_thumbnail($source_image_path, $thumbnail_image_path){
    list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
    switch ($source_image_type) {
        case IMAGETYPE_GIF:
            $source_gd_image = imagecreatefromgif($source_image_path);
            break;
        case IMAGETYPE_JPEG:
            $source_gd_image = imagecreatefromjpeg($source_image_path);
            break;
        case IMAGETYPE_PNG:
            $source_gd_image = imagecreatefrompng($source_image_path);
            break;
    }

    if ($source_gd_image === false) {
        return false;
    }

    $thumbnail_image_width = $source_image_width/5;
    $thumbnail_image_height = $source_image_height/5;

    $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
    imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
    imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);
    imagedestroy($source_gd_image);
    imagedestroy($thumbnail_gd_image);
    return true;
}
?>

関数に適切なパラメーターを渡すと、機能します。

PHP設定でGDが有効になっていることを確認してください。gd ライブラリを使用します。

于 2013-01-26T11:17:09.037 に答える
0

http://php.net/manual/en/imagick.resizeimage.php

で呼び出すFILTER_GAUSSIAN

<?php
    $image = new Imagick( $filename );
    $imageprops = $image->getImageGeometry();
    if ($imageprops['width'] <= 200 && $imageprops['height'] <= 200) {
        // don't upscale
    } else {
        $image->resizeImage(200,200, imagick::FILTER_GAUSSIAN, 0.9, true);
    }
?>

アイデアは、ガウス フィルターを使用してイメージをぼかすことであり、それをサブサンプリングすることではありません。

于 2013-01-26T11:07:19.710 に答える