PNG 이미지에서 다이어그램을 렌더링하는 JavaScript 다이어그램 편집기(오픈 소스)
8640 단어 programminguxjavascriptwebdev
그림 1. dgrm.net은 PNG 이미지에서 다이어그램을 열 수 있습니다.
dgrm.net | GitHub
<< Previous article
dgrm.net - 지식 지도 도구로 변환할 수 있는 다이어그램 편집기입니다.
고유 한 특징:
개발 과정에서 흥미로운 순간이 나타납니다. 오늘은 PNG에서 데이터를 읽는 방법에 대해 이야기하겠습니다. 프로젝트에서 사용할 소스 코드를 첨부합니다.
PNG 이미지에서 다이어그램을 여는 이유는 무엇입니까?
개발자가 만든 사용자 인터페이스는 이상하기로 유명합니다. 아마도 이미지를 프로젝트 파일로 사용한다는 아이디어가 바로 그것일 것입니다. 적어도 접근 방식은 독창적입니다.
모든 편집자는 자신의 프로젝트 파일을 사용합니다. 그러나 이것은 불편합니다.
필요한 경우 편집할 수 있는 다이어그램 그림이 있으면 더 편리합니다.
그림 1을 보면 스테가노그래피 또는 이미지 인식이 사용되고 있다고 가정할 수 있습니다. 실제로 훨씬 간단하고 핵이 없습니다. PNG 형식은 타임 스탬프, 작성자 이름 또는 기타와 같은 추가 정보 저장을 지원합니다.
dgrm.net은 다이어그램 데이터가 포함된 JSON을 png 파일에 기록합니다.
PNG 청크
다음은 PNG 사양입니다. "Portable Network Graphics (PNG) Specification ".
가장 밝은 부분:
그림 2. 하나의 PNG 청크 구조
사용자 지정 데이터의 경우 모든 청크 이름(예: "dgRm")을 생각할 수 있습니다.
따라서 PNG 파일 내에 JSON 문자열을 저장하려면 파일에 자체 청크를 추가해야 합니다.
브라우저에서 JavaScript로 PNG 청크 읽기/쓰기
청크 읽기
청크는 서로 이어지며 필요한 청크는 열거형으로 검색됩니다.
청크 검색 알고리즘(목록 1):
/**
* @param {ArrayBuffer} pngData
* @param {number} chunkNameUint32 chunk name as Uint32
* @returns {DataView | null} chunk data
*/
function chunkGet(pngData, chunkNameUint32) {
const dataView = new DataView(pngData, 8); // 8 byte - png signature
let chunkPosition = 0;
let chunkUint = dataView.getUint32(4);
let chunkLenght;
while (chunkUint !== 1229278788) { // last chunk 'IEND'
chunkLenght = dataView.getUint32(chunkPosition);
if (chunkUint === chunkNameUint32) {
return new DataView(pngData, chunkPosition + 16, chunkLenght);
}
chunkPosition = chunkPosition + 12 + chunkLenght;
chunkUint = dataView.getUint32(chunkPosition + 4);
}
return null;
}
목록 1. 청크 조회 기능
빠른 참조:
JavaScript에는 바이너리 데이터를 사용하는 흥미로운 방법이 있습니다.
인용하다:
ArrayBuffer 개체는 일반적인 고정 길이 원시 이진 데이터 버퍼를 나타내는 데 사용됩니다. …
ArrayBuffer의 내용을 직접 조작할 수 없습니다.
developer.mozilla.org
데이터를 읽으려면 데이터를 DataView 로 래핑할 수 있습니다. DataView를 사용하면 모든 위치의 데이터를 숫자로 읽을 수 있습니다(getInt8(), getUint32() 메서드 등 사용).
청크 쓰기
청크를 작성하려면 체인에 새 청크를 삽입해야 합니다. 주어진 이름의 청크가 이미 존재하는 경우 교체해야 합니다.
GitHub에서 구현 참조 - the chunkSet function .
소스 코드
PNG 청크 작업을 위한 기능은 하나의 파일에 있습니다. 이 파일에는 종속성이 없으므로 간단히 프로젝트에 복사할 수 있습니다.
png-chunk-utils.js
사용 예:
// Write a chunk, new blob output
const newPngBlob = await pngChunkSet(
// png-image
pngBlob,
// chunk name
'dgRm',
// chunk value: string as a bytes
new TextEncoder().encode('...'));
// read a chuk
const dgrmChunkVal = await pngChunkGet(newPngBlob, 'dgRm');
const str = new TextDecoder().decode(dgrmChunkVal);
목록 2. PNG 청크를 쓰고 읽는 함수 호출
프로젝트를 지원하는 방법
어떤 식으로든: 댓글, 개인 메시지, GitHub .
나는 모든 것을 읽고 제안 목록을 보관합니다.
Reference
이 문제에 관하여(PNG 이미지에서 다이어그램을 렌더링하는 JavaScript 다이어그램 편집기(오픈 소스)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alexboyko/javascript-diagram-editor-that-renders-diagrams-from-png-images-open-source-a63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)