Skip to content

Commit

Permalink
fix: SVG and images were inverted
Browse files Browse the repository at this point in the history
This is because I called commands with (x, y) instead of (y, x)
Fixes #47
  • Loading branch information
erwanvivien committed Dec 30, 2023
1 parent b736073 commit 5702ee8
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/convert/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ use crate::Module;
/// For the square shape, the svg is `M{x},{y}h1v1h-1`
///
/// ```rust
/// fn square(y: usize, x: usize) -> String {
/// # use fast_qr::Module;
/// fn square(y: usize, x: usize, _module: Module) -> String {
/// format!("M{x},{y}h1v1h-1")
/// }
/// ```
Expand Down
2 changes: 1 addition & 1 deletion src/convert/svg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ impl SvgBuilder {
}

for (i, command) in commands.iter().enumerate() {
paths[i].push_str(&command(x + self.margin, y + self.margin, cell));
paths[i].push_str(&command(y + self.margin, x + self.margin, cell));
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/tests/bytes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ fn it_can_output_to_bytes_from_image() {
use crate::{QRBuilder, ECL};

// Expected
let image_base64 = "iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAACsklEQVR4Ae2SUW4bQQxD8+5/6NQvAjsaza7rNB9NgRQgJFEUh96U98e/t2/27yfUq3+Q/+NLAbc/qP/3g9KFgzVD9TFSAzuXndW9NTi+FPA2RYrhnncvvIN7nXt1HXDqb0PB+mWaQR3DqprPnZwI3/vOTd45+FKoPJKq6VUfLlWdyGx1Dv46lAawvprGsL6uezmrgKV1Fu6heOfgNlQEqbCOYX88mvkIlG7y0Vth+TqLy1AurtDNoczg9XrlKaevNThCZfGswgqibprKCSid/WdwhIL65JrkMVic/DN4AysM1K28d1CzfTj7jttQHkCZw1ljos4e9seg5uynxln0vbM4Qn2QwxD2B2DNcB3Yx2DX6S1vhf1OLrgM9Xs5DmEZRZNHMqdCBXKOBtb95NQFt6FgGURs1Qz2B2HNasTUyU1EY+27IxTUAxFChfMIzh4Wp0bA8oDaw8lFm7ecxRFKUkCZ2HsENfe+7+SdJ6Du5KOBxXXeXhyhYB1oAjWnt34cPvj0fYbSywXqoHj78HBy7o5Qkh2wPr+GUEbRdK732af23eyjSX0aCipQxLPCvoc1Q4WfAaA0sPaH7+PovZOwi6FmNQ/tG1ybQunUqA2g+My9qoXy6/zll4LdyOMcwYXJDZcb76E8Zx9Nr0coqEfh9doN82hq381ezeScj1CSzwD1i6cmD0Dt+5zeG6i9feedgyMUrKOIUjWBfd85e7VwrXEP6y+gVshbg8tQU6QYTjN5oR5q7wwVavJ9Z+/eOnEbCsrYA49hf1TOnYDawVndT3gLu3/XfCkUPA/h4z4GS+cs3EHxzh2fDgX1CzXVCHZj+PPsndADdr38bSiXHVDHUNUdVED7PGAvMludJ6Bur/aXoaZBZg1gN4N9Vgsr+Jxh37mfOEJNwb+Yf0K9+tW/5Zf6BY5MJL8MrSO7AAAAAElFTkSuQmCC";
let image_base64 = "iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAACxElEQVR4Ae2W224UQQxEc/7/o2HOOrV2z/Qs0fJAkIKo2K4qX6YBCX4dvz6+2a+fo776B/J/vBRw+0H+9YPSzWMEPqyhojxUDh3ld7B38peXghoyTeZQPNRRchkGrU1u55GbgOpduGPIr4X4NMG6HKoZ7qNzjnmGB6BmyEH3PcTjx+SP8vn79qWgBuo8N0MvUNMDxc0c9pweYS+0R068dZSNAfTx4bLsXL/i4zXeHqU4AfVFsD9CL5TnnO9qOQHdYy22RynskC99N+5myjnPGFyOinAXoV7KQVD59MrP+p389ijohS6CemaoeLcMSofun15nWUPr4eTF7VGKAfx5EbTnsuTQMmtGfVB9k78cBWWC+pI02jRz6zvElzh9crPe5S+PcgBcj3PQTptcPEaoGebxzCg/cTlKEfq10iwfhDPKQfnNz4A6SC+0D4rXr2YMbo/SoBmq2VwOevCsoXioGM0YOAN6HnQej/FyFLQRagGsnI0iS4zWsPrk4TpD7ytsj8qwNFonh14sB7XUPID2wKrDvfbsPxYu/0tQgLVRThxewwes+o5/GD9/wP4w5fSaB2+9lIOgFsF6oIPVjQJKN5/QA6WZT+32KE3QTVBHhHcQFAcd1cXUrWE/S+2M26OgFtkAlUNH+cADzKEWm8tB1cln1AM1z3zi5VEaM2jmk5M/46u6vnOv9eUoyVeA9eugauiYfpdC8eGgX08OVv3BHY3Lvz6oJsUzDu+TghoGq18P7LloxuegTXJ5KahlZy80D+tSvS6C4mcezSigPdY73B4F1WxTliSGM0Ifm9oopt/6jOjGqf3VUdCHO3QOh6sG9QFQ2vTbH7x9lAMcCr0otdorTJ/52Xt71MX4uVwe6hDzAOrrU5+XQfVA+dShuPQkbo+KeI4OCgc1PHViPLAuhKphjemb8XLUFP9V/nPUV1/+W77Ub25RML9l49+tAAAAAElFTkSuQmCC";
let expected_data_uri = format!("data:image/png;base64,{image_base64}");

// Source
Expand Down
29 changes: 29 additions & 0 deletions src/tests/svg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,32 @@ fn it_embeds_an_image_via_data_uri() {
let expected_href = format!(r#"href="{data_uri}""#);
assert!(svg.contains(&expected_href));
}

#[cfg(feature = "svg")]
#[test]
fn check_svg_is_not_inverted() {
use crate::convert::svg::SvgBuilder;
use crate::convert::Builder;
use crate::{QRBuilder, Version, ECL};

let qrcode = QRBuilder::new("Test")
.ecl(ECL::M)
.version(Version::V01)
.build()
.unwrap();

const MARGIN: usize = 4;
let svg = SvgBuilder::default().margin(MARGIN).to_str(&qrcode);

let size = qrcode.size;
for y in 0..size {
for x in 0..size {
let index = y * size + x;
let expected = qrcode.data[index];
if expected.value() {
let expected = format!(r#"M{x},{y}"#, x = x + MARGIN, y = y + MARGIN);
assert!(svg.contains(&expected));
}
}
}
}

0 comments on commit 5702ee8

Please sign in to comment.