2011-08-13 14 views
0

jQueryを使用してAJAX経由で呼び出されるPHPファイルに挿入される画像を拡大/縮小するにはどのような方法が最適ですか?jqueryで画像を拡大/縮小する方法

私は画像が600pxの幅と410pxの高さをバイパスしないようにしていますが、画像がこの寸法を超えて奇妙に見えることは望ましくありません。しかし、ちょうど小さいスケールで。

また、既存のFlashスクリプトでこれを行う方法があれば、PicasawebサービスでGoogleが使用するような簡単なものは思い出せません。事前

答えて

2

おかげで元画像の実際の大きさHTMLImageElementリターンのnaturalWidthnaturalHeight DOMプロパティ。

if (imageElement.naturalWidth > imageElement.naturalHeight) 
    imageElement.style.width = '600px'; 
else 
    imageElement.style.height = '410px'; 

お知らせサイズ情報が利用可能なときにサイズを変更するだけであるように、それ以外の場合、naturalWidthnaturalHeightはゼロになり、問題が発生します。あなたは、画像を見てまごまごしている場合、縮小、大きなオフを開始、デフォルトで画像を非表示にして、リサイズした後、それを示しています。

必要がありません。ここで)

+0

あなたのスクリプトは、uはライトボックスを閉じて、クリックすると画像がまだ、それがリサイズされているというし、そのフルサイズとしてライトボックスに注入され、ブラウザによってキャッシュされている場合ただし、問題があるように思われる作品同じイメージをもう一度縮小しますが、それ以外の場合は完全に読み込まれます。 –

+0

私の更新されたポストは、イメージの 'load'イベントハンドラでサイズ変更をラップすることによって問題を修正しました。サイズ情報が利用可能になったときにサイズ変更を試みるだけです。 –

+0

大変ありがとうございます、まあまあまあまあ私は完全に遅くなっているようですが、問題はJSONフェッチの文字列 "&maxsize = 500"のvarialbeによって引き起こされているようですが、画像は強制的に500x500pxのダムとして表示されますこれが起こった可能性があります私はこの –

3

は、いくつかのです作品:

var max_size = 200; 
$("img").each(function(i) { 
    if ($(this).height() > $(this).width()) { 
    var h = max_size; 
    var w = Math.ceil($(this).width()/$(this).height() * max_size); 
    } else { 
    var w = max_size; 
    var h = Math.ceil($(this).height()/$(this).width() * max_size); 
    } 
    $(this).css({ height: h, width: w }); 
}); 

は、ここではアクションでそれをチェックアウト:画像のhttp://jsfiddle.net/QgDEk/

元のサイズは巨大であるが、そのスクリプトはそれのサイズを変更します。

ここにtutorialがあります。

+0

異なる最大幅と最大高さが必要な場合はどうすればよいですか? –

+0

'max_size'をあなたが望むものに変更します。 OPは画像をゆがめずに画像のサイズを変更するものを求めていました。 – Nathan

+0

が動作しますが、まだ私の頭をキーボードに打ちつける寸前で、アプリがPicasawebからJSON経由で画像を取り込むときに、既にある理由でサイズが変更されているようです。 –

1

ここでは、最大幅と高さをサポートする例を示します。

// Set max width and height 
var maxHeight = 50, 
    maxWidth = 40; 

// Create new image 
myImage = new Image(); 
myImage.src = 'http://dummyimage.com/600x400/000/fff'; 

// On load of image 
myImage.onload = function() { 

    var width = myImage.width, 
     height = myImage.height, 
     ratio = Math.min(maxWidth/width, maxHeight/height); 

    newWidth = parseInt(ratio * width); 
    newHeight = parseInt(ratio * height); 

    $('body').append('<p>Original: ' + width + ' x ' + height + '</p>'); 
    $('body').append('<p>Max: ' + maxWidth + ' x ' + maxHeight + '</p>'); 
    $('body').append('<p>Resized: ' + newWidth + ' x ' + newHeight + '</p>'); 

    // Add new image 
    $('body').append($('<img>', { 
     src: 'http://dummyimage.com/' + newWidth + 'x' + newHeight + '/000/fff', 
     width: newWidth, 
     height: newHeight, 
     alt: "Test Image", 
     title: "Test Image" 
    })); 
}; 
関連する問題