2012-12-30 8 views
10

私の知る限りでは、このように行われることになります。イメージをキャンバスに比例してサイズ変更するには? HTML5のキャンバスにロードされたイメージのサイズを変更する

var img = new Image(); 
img.onload = function() { 
    ctx.drawImage(img, 0, 0, 300, 200); // resizes image to 300px wide, 200px high 
} 
img.src = 'images/myimage.jpg'; 

しかし、その後、私はイメージが比例正確ではないことに気づきました。だから私は1つのパラメータだけを使用してみました(ちょうどHTMLのように)が、私はどちらもうまくいきませんでした。

イメージのサイズを比例的に変更するにはどうすればよいですか?

答えて

17

img.widthimg.heightを取得し、サイズを変更する幅に応じて比例高を計算します。

For example

ctx.drawImage(img, 300, 0, 300, img.height * (300/img.width)); 
+0

コードはこの例から抜粋したものです。コードを編集する場合は、新しい例を示してください。 – robertc

+0

この例では余分な300が別々にキャンバスを別々に表示するために使用され、イメージキャンバスのサイズをちょうど比例的に変更する以外に何かをしています。この例へのリンクがもう機能していない場合は、ここで提供されているコードが混乱する可能性があります。とにかく答えてくれてありがとう。 – bleuscyther

9

私は最後に、昨年、このトピックに関するブログ記事を書きました。あなたはそれを読むことができますhere。基本的には、適切な縦横比で画像を拡大縮小する機能を提供します。これには、風景と肖像の両方の向きとその2つの間のサイズをサポートすることが含まれます。 「レターボックス」と「パンとスキャン(ズーム)」モードを選択することもできます。

divの位置付けを念頭に置いて書かれていましたが、キャンバスで簡単に理解できました。

ページの下部には、「ScaleImage」機能があります。それはあなたが望むものかもしれません。次のようにあなたはそれを適用することができます:あなたが中心のイメージをしたくない場合は、result.targetleftを交換し、「0」とresult.targettopでき

var img = new Image(); 
img.onload = function() { 

    var result = ScaleImage(img.width, img.height, 300, 200, true); 

    ctx.drawImage(img, result.targetleft, result.targettop, result.width, result.height); // resizes image to a target size of 300x200 using letterbox mode 
} 
img.src = 'images/myimage.jpg'; 

+0

コードを更新していただきありがとうございます。あなたはスポットを逃した(コードの下に) –

+0

@HDog - うん。再び固定された – selbie

関連する問題