javascript PNG 操作
javascript PNG manipulation
我正在制作一个玩纸牌游戏的网站。卡片图像是从服务器下载的一个大 PNG 文件。在客户端,使用 javascript,我想制作多个元素,每张卡片一个。
var cards = new Array(number of cards);
var request = new XMLHttpRequest();
request.responseType = "arraybuffer";
//alternatively: request.responseType = "blob";
request.onreadystatechange = function(){
var arrayBuffer = this.respons;
//how do I cut up the arrayBuffer such that i can use something like:
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL( cards[3] );
var img = document.getElementById("img");
img.src = imageUrl;
}
request.open("GET","cardsheet.png",true);
request.send();
arrayBuffer.slice(0,cardWidth) 不起作用,因为此 returns 是一个新的可变数组缓冲区,一张卡片会退出多个 arrayBuffer.slice(0,cardWidth)。
我想这样做的原因是加载所有卡片只向服务器发出一个请求。如果我的想法没有完成,你能给我一个替代方案吗?
您可以使用 CSS 来简化这一点,只需在设置元素的背景图像时使用 background-position 样式即可。
.card {
width:100px;
height:175px;
background-image:url(http://placekitten.com/300/300);
background-position:100px 100px;
}
演示
.card {
width:100px;
height:175px;
display:inline-block;
background-image:url(http://placekitten.com.s3.amazonaws.com/homepage-samples/408/287.jpg);
}
.card.card-1 {
background-position:0px 0;
}
.card.card-2 {
background-position:-100px 0;
}
.card.card-3 {
background-position:-200px 0;
}
<div class="card card-1"></div>
<div class="card card-2"></div>
<div class="card card-3"></div>
我正在制作一个玩纸牌游戏的网站。卡片图像是从服务器下载的一个大 PNG 文件。在客户端,使用 javascript,我想制作多个元素,每张卡片一个。
var cards = new Array(number of cards);
var request = new XMLHttpRequest();
request.responseType = "arraybuffer";
//alternatively: request.responseType = "blob";
request.onreadystatechange = function(){
var arrayBuffer = this.respons;
//how do I cut up the arrayBuffer such that i can use something like:
var urlCreator = window.URL || window.webkitURL;
var imageUrl = urlCreator.createObjectURL( cards[3] );
var img = document.getElementById("img");
img.src = imageUrl;
}
request.open("GET","cardsheet.png",true);
request.send();
arrayBuffer.slice(0,cardWidth) 不起作用,因为此 returns 是一个新的可变数组缓冲区,一张卡片会退出多个 arrayBuffer.slice(0,cardWidth)。 我想这样做的原因是加载所有卡片只向服务器发出一个请求。如果我的想法没有完成,你能给我一个替代方案吗?
您可以使用 CSS 来简化这一点,只需在设置元素的背景图像时使用 background-position 样式即可。
.card {
width:100px;
height:175px;
background-image:url(http://placekitten.com/300/300);
background-position:100px 100px;
}
演示
.card {
width:100px;
height:175px;
display:inline-block;
background-image:url(http://placekitten.com.s3.amazonaws.com/homepage-samples/408/287.jpg);
}
.card.card-1 {
background-position:0px 0;
}
.card.card-2 {
background-position:-100px 0;
}
.card.card-3 {
background-position:-200px 0;
}
<div class="card card-1"></div>
<div class="card card-2"></div>
<div class="card card-3"></div>