Skip to content

Commit fb30c75

Browse files
committed
chunk size diffuse
1 parent d2bffac commit fb30c75

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "chaotic-enc"
3-
version = "0.1.0"
3+
version = "0.2.0"
44
edition = "2024"
55

66
[lib]

src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ pub fn encode(im: &[u8], secret: &str, max_side: i32, as_type: &str) -> Box<[u8]
124124
let seed = str2f(&secret);
125125
console_log!("Seed: {}", seed);
126126

127-
let pixels = logistic_map::encode(&im_v, seed);
127+
let pixels = logistic_map::encode::<3>(&im_v, seed);
128128

129129
vec2imblob(&pixels, im_opt, None, match as_type {
130130
"png" => ImageType::Png,
@@ -142,7 +142,7 @@ pub fn decode(im: &[u8], secret: &str, max_side: i32, as_type: &str) -> Box<[u8]
142142
let seed = str2f(&secret);
143143
console_log!("Seed: {}", seed);
144144

145-
let pixels = logistic_map::decode(&im_v, seed);
145+
let pixels = logistic_map::decode::<3>(&im_v, seed);
146146

147147
vec2imblob(&pixels, im_opt, max_side, match as_type {
148148
"png" => ImageType::Png,

src/logistic_map.rs

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ enum DiffuseDirection {
4141
Forward,
4242
Backward,
4343
}
44-
fn diffuse<T: Copy>(im: &Vec<T>, enc_map: &Vec<f64>, direction: DiffuseDirection) -> Vec<T>
44+
fn diffuse<T: Copy>(im: &Vec<T>, enc_map: &Vec<f64>, direction: DiffuseDirection, chunk_size: usize) -> Vec<T>
4545
{
46-
let enc_map = enc_map
46+
let enc_map = enc_map[..im.len()/chunk_size]
4747
.iter()
4848
.map(|&x| x.to_bits())
4949
.collect();
@@ -55,16 +55,22 @@ fn diffuse<T: Copy>(im: &Vec<T>, enc_map: &Vec<f64>, direction: DiffuseDirection
5555
match direction {
5656
DiffuseDirection::Forward => {
5757
for &index in &indices {
58-
diffuse_pixels.push(im[index]);
58+
for i in 0..chunk_size {
59+
let index = index * chunk_size + i;
60+
diffuse_pixels.push(im[index]);
61+
}
5962
}
6063
},
6164
DiffuseDirection::Backward => {
62-
let mut lookup: Vec<usize> = vec![0; im.len()];
65+
let mut lookup: Vec<usize> = vec![0; im.len() / chunk_size];
6366
for (i, &index) in indices.iter().enumerate() {
6467
lookup[index] = i;
6568
}
6669
for &index in &lookup {
67-
diffuse_pixels.push(im[index]);
70+
for i in 0..chunk_size {
71+
let index = index * chunk_size + i;
72+
diffuse_pixels.push(im[index]);
73+
}
6874
}
6975
},
7076
}
@@ -73,24 +79,25 @@ fn diffuse<T: Copy>(im: &Vec<T>, enc_map: &Vec<f64>, direction: DiffuseDirection
7379
diffuse_pixels
7480
}
7581

76-
pub fn encode(im: &Vec<u8>, x0: f64) -> Vec<u8> {
82+
// C: channel size, e.g. 3 for RGB
83+
pub fn encode<const C: usize>(im: &Vec<u8>, x0: f64) -> Vec<u8> {
7784
let enc_map = generate_map(LogisticMapOptions {
7885
x: x0,
7986
r: R,
8087
size: im.len(),
8188
});
8289

83-
let im = diffuse(&im, &enc_map, DiffuseDirection::Forward);
90+
let im = diffuse(&im, &enc_map, DiffuseDirection::Forward, C);
8491
confuse_xor(&im, &enc_map)
8592
}
8693

87-
pub fn decode(im: &Vec<u8>, x0: f64) -> Vec<u8> {
94+
pub fn decode<const C:usize>(im: &Vec<u8>, x0: f64) -> Vec<u8> {
8895
let enc_map = generate_map(LogisticMapOptions {
8996
x: x0,
9097
r: R,
9198
size: im.len(),
9299
});
93100

94101
let im = confuse_xor(&im, &enc_map);
95-
diffuse(&im, &enc_map, DiffuseDirection::Backward)
102+
diffuse(&im, &enc_map, DiffuseDirection::Backward, C)
96103
}

0 commit comments

Comments
 (0)