Merge pull request #11 from leomurca/feature/support_jef_format

Add support for jef format
This commit is contained in:
Leonardo Murça 2022-12-01 16:44:55 -03:00 committed by GitHub
commit e3e3c3eabe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 140 additions and 2 deletions

View file

@ -5,6 +5,6 @@ Available at https://embroideryviewer.xyz.
![Demo](/demo.gif) ![Demo](/demo.gif)
Current supported formats: **.pes, .dst and .pec**. Current supported formats: **.pes, .dst, .pec and .jef**.
Inspired by https://github.com/redteam316/html5-embroidery.git. Inspired by https://github.com/redteam316/html5-embroidery.git.

View file

@ -3,6 +3,7 @@ import { pesRead } from "../format-readers/pes";
import { dstRead } from "../format-readers/dst"; import { dstRead } from "../format-readers/dst";
import { Pattern } from "./pattern"; import { Pattern } from "./pattern";
import { pecRead } from "../format-readers/pec"; import { pecRead } from "../format-readers/pec";
import { jefRead } from "../format-readers/jef";
String.prototype.endsWith = function (suffix) { String.prototype.endsWith = function (suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1; return this.indexOf(suffix, this.length - suffix.length) !== -1;
@ -18,6 +19,8 @@ function displayFileText(filename, evt, canvas) {
dstRead(view, pattern); dstRead(view, pattern);
} else if (filename.endsWith("pec")) { } else if (filename.endsWith("pec")) {
pecRead(view, pattern); pecRead(view, pattern);
} else if (filename.endsWith("jef")) {
jefRead(view, pattern);
} }
pattern.moveToPositive(); pattern.moveToPositive();
pattern.drawShape(canvas); pattern.drawShape(canvas);

135
src/format-readers/jef.js Normal file
View file

@ -0,0 +1,135 @@
import { Color, stitchTypes } from "../file-renderer/pattern";
const colors = [
new Color(0, 0, 0, "Black"),
new Color(0, 0, 0, "Black"),
new Color(255, 255, 255, "White"),
new Color(255, 255, 23, "Yellow"),
new Color(250, 160, 96, "Orange"),
new Color(92, 118, 73, "Olive Green"),
new Color(64, 192, 48, "Green"),
new Color(101, 194, 200, "Sky"),
new Color(172, 128, 190, "Purple"),
new Color(245, 188, 203, "Pink"),
new Color(255, 0, 0, "Red"),
new Color(192, 128, 0, "Brown"),
new Color(0, 0, 240, "Blue"),
new Color(228, 195, 93, "Gold"),
new Color(165, 42, 42, "Dark Brown"),
new Color(213, 176, 212, "Pale Violet"),
new Color(252, 242, 148, "Pale Yellow"),
new Color(240, 208, 192, "Pale Pink"),
new Color(255, 192, 0, "Peach"),
new Color(201, 164, 128, "Beige"),
new Color(155, 61, 75, "Wine Red"),
new Color(160, 184, 204, "Pale Sky"),
new Color(127, 194, 28, "Yellow Green"),
new Color(185, 185, 185, "Silver Grey"),
new Color(160, 160, 160, "Grey"),
new Color(152, 214, 189, "Pale Aqua"),
new Color(184, 240, 240, "Baby Blue"),
new Color(54, 139, 160, "Powder Blue"),
new Color(79, 131, 171, "Bright Blue"),
new Color(56, 106, 145, "Slate Blue"),
new Color(0, 32, 107, "Nave Blue"),
new Color(229, 197, 202, "Salmon Pink"),
new Color(249, 103, 107, "Coral"),
new Color(227, 49, 31, "Burnt Orange"),
new Color(226, 161, 136, "Cinnamon"),
new Color(181, 148, 116, "Umber"),
new Color(228, 207, 153, "Blonde"),
new Color(225, 203, 0, "Sunflower"),
new Color(225, 173, 212, "Orchid Pink"),
new Color(195, 0, 126, "Peony Purple"),
new Color(128, 0, 75, "Burgundy"),
new Color(160, 96, 176, "Royal Purple"),
new Color(192, 64, 32, "Cardinal Red"),
new Color(202, 224, 192, "Opal Green"),
new Color(137, 152, 86, "Moss Green"),
new Color(0, 170, 0, "Meadow Green"),
new Color(33, 138, 33, "Dark Green"),
new Color(93, 174, 148, "Aquamarine"),
new Color(76, 191, 143, "Emerald Green"),
new Color(0, 119, 114, "Peacock Green"),
new Color(112, 112, 112, "Dark Grey"),
new Color(242, 255, 255, "Ivory White"),
new Color(177, 88, 24, "Hazel"),
new Color(203, 138, 7, "Toast"),
new Color(247, 146, 123, "Salmon"),
new Color(152, 105, 45, "Cocoa Brown"),
new Color(162, 113, 72, "Sienna"),
new Color(123, 85, 74, "Sepia"),
new Color(79, 57, 70, "Dark Sepia"),
new Color(82, 58, 151, "Violet Blue"),
new Color(0, 0, 160, "Blue Ink"),
new Color(0, 150, 222, "Solar Blue"),
new Color(178, 221, 83, "Green Dust"),
new Color(250, 143, 187, "Crimson"),
new Color(222, 100, 158, "Floral Pink"),
new Color(181, 80, 102, "Wine"),
new Color(94, 87, 71, "Olive Drab"),
new Color(76, 136, 31, "Meadow"),
new Color(228, 220, 121, "Mustard"),
new Color(203, 138, 26, "Yellow Ochre"),
new Color(198, 170, 66, "Old Gold"),
new Color(236, 176, 44, "Honeydew"),
new Color(248, 128, 64, "Tangerine"),
new Color(255, 229, 5, "Canary Yellow"),
new Color(250, 122, 122, "Vermillion"),
new Color(107, 224, 0, "Bright Green"),
new Color(56, 108, 174, "Ocean Blue"),
new Color(227, 196, 180, "Beige Grey"),
new Color(227, 172, 129, "Bamboo"),
];
function jefDecode(inputByte) {
return inputByte >= 0x80 ? -(~inputByte & 0xff) - 1 : inputByte;
}
export function jefRead(file, pattern) {
file.seek(24);
const numberOfColors = file.getInt32(file.tell(), true);
const numberOfStitches = file.getInt32(file.tell(), true);
file.seek(file.tell() + 84);
for (let i = 0; i < numberOfColors; i += 1) {
pattern.addColor(colors[file.getUint32(file.tell(), true) % 78]);
}
for (let i = 0; i < 6 - numberOfColors; i += 1) {
file.getUint32();
}
let flags,
b0,
b1,
dx,
dy,
stitchCount = 0;
while (stitchCount < numberOfStitches + 100) {
flags = stitchTypes.normal;
b0 = file.getUint8();
b1 = file.getUint8();
if (b0 === 0x80) {
if (b1 & 0x01) {
b0 = file.getUint8();
b1 = file.getUint8();
flags = stitchTypes.stop;
} else if (b1 === 0x02 || b1 === 0x04) {
b0 = file.getUint8();
b1 = file.getUint8();
flags = stitchTypes.trim;
} else if (b1 === 0x10) {
pattern.addStitchRel(0, 0, stitchTypes.end, true);
break;
}
}
dx = jefDecode(b0);
dy = jefDecode(b1);
pattern.addStitchRel(dx, dy, flags, true);
stitchCount += 1;
}
pattern.invertPatternVertical();
}
export const jefColors = colors;

View file

@ -9,7 +9,7 @@
let rejectedFiles; let rejectedFiles;
let areAcceptedFilesRendered = false; let areAcceptedFilesRendered = false;
const fileRequirements = { const fileRequirements = {
supportedFormats: [".pes", ".dst", ".pec"], supportedFormats: [".pes", ".dst", ".pec", ".jef"],
maxSize: 700000, maxSize: 700000,
}; };