1

私が取り組んでいるサイトには、データベースから取得した画像がたくさんあります。画像のサイズが一定ではなく、均一なサイズのボックス (div) に表示しようとしています。画像のサイズはわかりませんが、次の方法で取得できます。

document.getElementById( myImage ).width
document.getElementById( myImage ).height

この後、テストを行って、均一なボックスに合わせて画像のサイズを変更する方法を確認します。最後に、次のように効果を設定します。

document.getElementById( myImage ).width = theNewWidth
document.getElementById( myImage ).height = theNewHeight

この関数はonload="resizingFunction( imgId );"、img タグで使用することにより、画像ごとに 1 回だけ呼び出されます。データベース内のすべての画像がこの関数を完了するのに約 1 ~ 2 秒かかり、これらの画像に対して関数が再度実行されることはありません。二度と実行しないにもかかわらず、この機能を使用すると、サイトの実行が大幅に遅くなります。グーグルで調べた後、追加しようとしました:

document.getElementById( myImage ).removeAttribute("width")
document.getElementById( myImage ).removeAttribute("height")

新しい幅と高さを設定する前。これにより速度は向上しましたが、画像のサイズを変更しなかった場合よりもまだ遅くなります。繰り返しますが、明確にするために、各画像はロード後に一度サイズ変更されますが、何らかの理由でサイトの速度が低下します.

画像は、PHP を JavaScript にエコーすることによって作成されます。これが必要なのは、データベース (PHP) からの情報が必要であり、JavaScript がそれらを正しいボックス (div) 内に配置するためです。イメージコードの作成は次のとおりです。

echo "\t\t\tdocument.getElementById('gBox".$i."').innerHTML = '<img onload=\"image_applyToGrid(".$i.");\" id=\"img".$i."\" style=\"left:0; top:0;\" src=\"'+gBoxes[".$i."].imgPath+'\"/>';\n";

画像がオンロード時に呼び出す画像サイズ変更関数は次のとおりです。

function image_applyToGrid(inId) {
inIdImage = document.getElementById("img"+inId);
var imgW = inIdImage.width;
var imgH = inIdImage.height;
if (imgW > imgH) {
    var proportions = imgW/imgH;
    imgH = gridUnit;
    imgW = gridUnit*proportions;
    inIdImage.style.left = -((imgW-gridUnit)>>1)+"px";
}
else {
    var proportions = imgH/imgW;
    imgW = gridUnit;
    imgH = gridUnit*proportions;
    inIdImage.style.top = -((imgH-gridUnit)>>1)+"px";
}
inIdImage.removeAttribute("width");
inIdImage.removeAttribute("height");
inIdImage.width = imgW;
inIdImage.height = imgH;
}
4

3 に答える 3

4

一般に、Javascript を使用した画像のサイズ変更は理想的な方法ではありません。フル サイズの画像を Web 経由で送信し、縮小するためにすべての帯域幅を消費しています。より良い方法は、イメージ ストアからイメージを取得し、サーバー側でサイズを変更することです。次に、結果をサーバー側のキャッシュに保存して、すべてのクライアント リクエストに最適化された画像を提供できるようにします。ここでキャッシュの概念を考えすぎる必要はありません。この場合は、データベース内のディレクトリまたは新しい列と同じくらい単純である可能性があります。(FWIW、データベースにバイナリデータを保存したくないのですが、それはおそらく別の議論です)

参照: http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/

于 2012-10-12T17:08:51.230 に答える
0

画像が大きすぎる可能性があります。ウェブ用に画像を準備することをお勧めします。これを行う方法に関するアイデアについては、Google の「Web 用に画像を最適化する」を参照してください。

于 2012-10-12T17:04:26.680 に答える
0

フルサイズの画像を取得して、画像全体を異なるサイズでロードするのは悪い習慣です。サムネイルを生成してページに配置することを検討してください。

高さと幅を 500x500 に設定するだけの 2500x2500 の画像がある場合、2500x2500 の画像全体をロードする必要があります。

于 2012-10-12T17:06:24.130 に答える