4

アップロードされた画像のサイズを取得しています Imagick:

$im->getImageSize();

これは、イメージのサイズをバイト単位で返します。

ファイルサイズが特定のサイズを超えないように、圧縮レベルを自動的に設定したいと思います。最小許容圧縮レベル 60 (0 ~ 100 のスケール) で 70kb に制限したい場合は、次のようなことから始めます。

 public function getCompLevel($size)
 {
                    $maxsize = 70000; // Set rough max size of file
                    $mincomp = 60;   // Set minimum compression level allowed


                    if($size > $maxsize ){   // If file size exceeds max allowed size, perform calculation
                        $comp = **EQUATION**
                    }

        return ($comp < $mincomp) ? $mincomp : $comp; // if output is less than minimum allowed compression , return minimum.  If not return calculated compression level
 }

私が理解しようとしているのは、ファイルサイズに基づいて必要な圧縮レベルの近似値を計算するために必要な方程式です。色がファイルサイズに影響するため、これがそれほど正確ではない場合があることは理解していますが、できるだけ近づけたいと思います.

どんな助けでも大歓迎です。

4

1 に答える 1

2

私はこの質問が好きですが、本当に正しい答えはありません。$x変数がゼロから始まるファイルサイズを表し、最大ファイルサイズの2倍に増加するマルチプルインスタンスを複製しました。さらに、変数を作成しました$equalizer。この変数は指数関数的に機能しますが、に設定すると100より高い圧縮レベルが作成され、代わりにに近づくと0はるかに大きなギャップが作成されます。

<?php
$max_file_size = 70000;
$max_compression = 60;
$equalizer = 100;

for($x=0;$x<$max_file_size+$max_file_size;$x+=10000){
    if($x < $max_file_size){
        echo $max_compression.'<br>';
    }else{
        echo $max_compression - (($x / $max_compression * $max_file_size) / ($max_file_size * $max_compression * $equalizer)).'<br>';
    }

}?>

あなたの実際の状況では、私はあなたの関数が次のように見えると想像します:

<?php
function getCompLevel($size){
    $maxsize = 70000;
    $compression = 60;
    $equalizer = 100;

    if($size > $maxsize ){
        $compression = $compression - (($size / $compression * $maxsize) / ($maxsize * $compression * $equalizer));
    }

    return $compression;
}?>
于 2012-12-13T01:33:28.420 に答える