canvas 출력 이미지 코드 흐름 배경색 설정
문제
이전에 프로젝트에서 d3로 트리 그림 등svg 도형을 그렸고, 그 다음에 png 형식으로 이 그림을 서버에 업로드하여 다른 곳에서 호출할 수 있도록 저장해야 한다. 이것은svg 코드 흐름을 만들고 canvas에 그림을 그리고 마지막에 canvas를 이용한다.DataUrl () 은 png 코드 흐름을 생성하여 서버에 업로드하지만 업로드한 결과 문제가 발견되었습니다. png 코드 흐름이 생성한 그림이 canvas의 배경색을 잃어버리고 배경색이 투명하게 변했습니다.
문제의 원인
질문 조회 후 canvas 초안에서 발견된 원인은 다음과 같습니다.
For image types that do not support an alpha channel, the image must be composited onto a solid black background using the source-over operator, and the resulting image must be the one used to create the data: URL.
toDataUrl에서 출력한 코드 흐름을 이용하여 그림을 만들 때 그림 형식에 따라 투명하거나 검은색이 됩니다.
솔루션
직접 코드:
//Returns contents of a canvas as a png based data url, with the specified
//background color
function canvasToImage(backgroundColor)
{
//cache height and width
var w = canvas.width;
var h = canvas.height;
var data;
if(backgroundColor)
{
//get the current ImageData for the canvas.
data = context.getImageData(0, 0, w, h);
//store the current globalCompositeOperation
var compositeOperation = context.globalCompositeOperation;
//set to draw behind current content
context.globalCompositeOperation = "destination-over";
//set background color
context.fillStyle = backgroundColor;
//draw background / rect on entire canvas
context.fillRect(0,0,w,h);
}
//get the image data from the canvas
var imageData = this.canvas.toDataURL("image/png");
if(backgroundColor)
{
//clear the canvas
context.clearRect (0,0,w,h);
//restore it with original / cached ImageData
context.putImageData(data, 0,0);
//reset the globalCompositeOperation to what it was
context.globalCompositeOperation = compositeOperation;
}
//return the Base64 encoded data url string
return imageData;
}
주요 몇 단계
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.