CSSスプライトのように
background-position
で表示位置を調整して疑似トリミングを実現することもできるが、今回はHTML5のCanvasを使ってトリミングする方法をまとめる。CSSスプライトについては、以下の記事を参照ください。
Canvasを使って画像をトリミングする
トリミングの方法は、CSSスプライトと同じ要領。
SlackのEmojiアイコンでスロットを作ってCSSスプライトを学ぶ | Black Everyday Company
CSSスプライトでは、
width
とheight
で表示領域を定め、background-position
で背景画像の位置を調整し、目的の画像だけを表示していた。Canvasによるトリミングは、
canvas.width
とcanvas.height
で表示領域を定め、描画するときにctx.drawImage(image, xOffset, yOffset)
のようにoffset
(CSSスプライトでいうbackground-position)で位置を調整する。具体例を見ていただいたほうが早いだろう。
function trimImage(src) {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = src;
img.onload = () => {
const xOffset = 0;
const yOffset = -110;
canvas.width = img.width;
canvas.height = 40;
// drawImage(image, xOffset, yOffset, width, height)
ctx.drawImage(img, xOffset, yOffset);
};
return canvas;
}
上記例では、canvasのサイズを
canvas.width = 画像の幅
、 canvas.height = 40px
にして、描画する際にctx.drawImage(img, 0, -100)
のように上方向に-110pxずらしている。結果、「ウィキペディア」という文字だけにトリミングできた。
参考サイト
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿