2012-07-27 3 views
1

는 Cairo에 의존하는 HTML5 캔버스 라이브러리의 Node.js 버전입니다. 내 앱은 앱에 전송되는 데이터에 따라 여러 개의 PNG 파일을 만듭니다.node-canvas : 인터레이스/프로그레시브로 출력되는 PNG 파일

node-canvas은 원시 PNG 또는 Base64로 인코딩 된 PNG를 브라우저로 보낼 수있는 문자열로 출력하는 두 가지 기능 (toBuffer()toDataURL())을 제공합니다. 그러나 라이브러리에서 인터레이스에 대한 지원을 추가 할 수있는 방법은 없습니다.

라이브러리의 기능을 확장하고 인터레이스 PNG에 대한 지원을 추가하고 싶습니다. 원시 PNG 데이터가 문자열에 있고 이미지의 픽셀 배열도 필요합니다 (필요한 경우). PNG 인코딩 작동 방식을 이해하지 못했습니다. 누군가가 비 - 인터레이스 원시 PNG 데이터 또는 픽셀 배열을 가지고 인터레이스/프로그레시브 PNG로 변환 한 데이터를 변환하는 데 사용해야하는 알고리즘을 가르쳐 주시겠습니까?

이것은 그래프 계산기 계산기가 복잡한 그래프를 작성하는 데 필요한 단계입니다. 신속하게 나타나고 내 앱에서 위에서 아래로로드되는 비 인터레이스 PNG보다 시간이 지나면 선명하게 보이는 흐릿한 이미지를 갖는 것이 좋습니다.

감사합니다.

+0

인터레이스 PNG는 거의 항상 나쁜 생각이다 "빠르게 나타나고 선명 흐린 이미지가 좋은 것입니다." 예 : http://www.codinghorror.com/blog/2007/03/getting-the-most-out-of-png.html – leonbloy

답변

0

비 인터레이스 원시 PNG 데이터를 인터레이스 PNG 스트림으로 변환 할 수 없습니다. 인터레이스와 비 인터레이스 PNG는 PNG 인코딩의 두 가지 방식입니다 (픽셀 스트림 순서가 기본적으로 다르지만 필터 압축이 적용된 이후 최종 스트림을 간단히 변경하여 인터레이스와 비 인터레이스 간을 전환 할 수는 없습니다) 인터레이스 된 모드). 인터레이스 PNG를 생성하려면 원시 이미지 픽셀에서 PNG 파일 (또는 스트림)을 작성하는 데 사용되는 PNG 인코더의 작업이 필요합니다.

그럼에도 불구하고, 나는 인터레이스 된 이미지에 대해 조언합니다. 압축 효율이 떨어지고 (특히 PNG의 경우) 사용자 경험에 대한 장점은 적어도 논쟁의 여지가 있습니다. See eg. 오늘날 인터레이스 PNG는 거의 사용되지 않습니다.