Update image

This commit is contained in:
Thomas Forgione 2021-07-05 16:24:00 +02:00
parent 37f8bacc3c
commit ebbe5b7ad0
3 changed files with 244 additions and 237 deletions

368
Cargo.lock generated
View File

@ -1,354 +1,338 @@
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
[[package]] version = 3
name = "adler32"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]] [[package]]
name = "arrayvec" name = "adler"
version = "0.4.10" version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
"nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
] [[package]]
name = "adler32"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "0.1.4" version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.1.0" version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
[[package]]
name = "bytemuck"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9966d2ab714d0f785dbac0a0396251a35280aeb42413281617d0209ab4898435"
[[package]] [[package]]
name = "byteorder" name = "byteorder"
version = "1.3.2" version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "0.1.9" version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "color_quant" name = "color_quant"
version = "1.0.1" version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "crc32fast"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
dependencies = [
"cfg-if",
]
[[package]]
name = "crossbeam-channel"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
dependencies = [
"cfg-if",
"crossbeam-utils",
]
[[package]] [[package]]
name = "crossbeam-deque" name = "crossbeam-deque"
version = "0.6.3" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
dependencies = [ dependencies = [
"crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if",
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-epoch",
"crossbeam-utils",
] ]
[[package]] [[package]]
name = "crossbeam-epoch" name = "crossbeam-epoch"
version = "0.7.1" version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
dependencies = [ dependencies = [
"arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if",
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils",
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "memoffset",
"memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "scopeguard",
"scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-queue"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.6.5" version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
dependencies = [ dependencies = [
"cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "cfg-if",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0",
] ]
[[package]] [[package]]
name = "deflate" name = "deflate"
version = "0.7.20" version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
dependencies = [ dependencies = [
"adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "adler32",
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder",
] ]
[[package]] [[package]]
name = "either" name = "either"
version = "1.5.2" version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]] [[package]]
name = "gif" name = "gif"
version = "0.10.2" version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de"
dependencies = [ dependencies = [
"color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "color_quant",
"lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "weezl",
]
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
] ]
[[package]] [[package]]
name = "image" name = "image"
version = "0.21.2" version = "0.23.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
dependencies = [ dependencies = [
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "bytemuck",
"gif 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder",
"jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)", "color_quant",
"lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "gif",
"num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "jpeg-decoder",
"num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-iter",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "num-rational",
"png 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits",
"scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "png",
"tiff 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "scoped_threadpool",
] "tiff",
[[package]]
name = "inflate"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "jpeg-decoder" name = "jpeg-decoder"
version = "0.1.15" version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
dependencies = [ dependencies = [
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "rayon",
"rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "0.2.11" version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.3.0" version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.58" version = "0.2.97"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lzw"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
version = "0.2.1" version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "nodrop"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "num-derive"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
dependencies = [ dependencies = [
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)", ]
"syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)",
[[package]]
name = "miniz_oxide"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
dependencies = [
"adler32",
]
[[package]]
name = "miniz_oxide"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
dependencies = [
"adler",
"autocfg",
] ]
[[package]] [[package]]
name = "num-integer" name = "num-integer"
version = "0.1.41" version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [ dependencies = [
"autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits",
] ]
[[package]] [[package]]
name = "num-iter" name = "num-iter"
version = "0.1.39" version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59"
dependencies = [ dependencies = [
"autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits",
] ]
[[package]] [[package]]
name = "num-rational" name = "num-rational"
version = "0.2.2" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
dependencies = [ dependencies = [
"autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
"num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", "num-integer",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits",
] ]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.8" version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [ dependencies = [
"autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
] ]
[[package]] [[package]]
name = "num_cpus" name = "num_cpus"
version = "1.10.1" version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [ dependencies = [
"libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)", "hermit-abi",
"libc",
] ]
[[package]] [[package]]
name = "png" name = "png"
version = "0.14.1" version = "0.16.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
dependencies = [ dependencies = [
"bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "bitflags",
"deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)", "crc32fast",
"inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)", "deflate",
"num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", "miniz_oxide 0.3.7",
]
[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "psnr" name = "psnr"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"image 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)", "image",
"lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.11",
]
[[package]]
name = "quote"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.1.0" version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
dependencies = [ dependencies = [
"crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "autocfg",
"either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-deque",
"rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "either",
"rayon-core",
] ]
[[package]] [[package]]
name = "rayon-core" name = "rayon-core"
version = "1.5.0" version = "1.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
dependencies = [ dependencies = [
"crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-channel",
"crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-deque",
"crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils",
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0",
"num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)", "num_cpus",
] ]
[[package]] [[package]]
name = "scoped_threadpool" name = "scoped_threadpool"
version = "0.1.9" version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "0.3.3" version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "syn"
version = "0.15.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
"quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]] [[package]]
name = "tiff" name = "tiff"
version = "0.2.2" version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437"
dependencies = [ dependencies = [
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "jpeg-decoder",
"lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "miniz_oxide 0.4.4",
"num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "weezl",
"num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
] ]
[[package]] [[package]]
name = "unicode-xid" name = "weezl"
version = "0.1.0" version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8b77fdfd5a253be4ab714e4ffa3c49caf146b4de743e97510c0656cf90f1e8e"
[metadata]
"checksum adler32 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7e522997b529f05601e05166c07ed17789691f562762c7f3b987263d2dedee5c"
"checksum arrayvec 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "92c7fb76bc8826a8b33b4ee5bb07a247a81e76764ab4d55e8f73e3a4d8808c71"
"checksum autocfg 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "0e49efa51329a5fd37e7c79db4621af617cd4e3e5bc224939808d076077077bf"
"checksum bitflags 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3d155346769a6855b86399e9bc3814ab343cd3d62c7e985113d46a0ec3c281fd"
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
"checksum cfg-if 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b486ce3ccf7ffd79fdeb678eac06a9e6c09fc88d33836340becb8fffe87c5e33"
"checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd"
"checksum crossbeam-deque 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "05e44b8cf3e1a625844d1750e1f7820da46044ff6d28f4d43e455ba3e5bb2c13"
"checksum crossbeam-epoch 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "04c9e3102cc2d69cd681412141b390abd55a362afc1540965dad0ad4d34280b4"
"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
"checksum crossbeam-utils 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f8306fcef4a7b563b76b7dd949ca48f52bc1141aa067d2ea09565f3e2652aa5c"
"checksum deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
"checksum either 1.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "5527cfe0d098f36e3f8839852688e63c8fff1c90b2b405aef730615f9a7bcf7b"
"checksum gif 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "86c2f2b597d6e05c86ee5947b2223bda468fe8dad3e88e2a6520869322aaf568"
"checksum image 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)" = "99198e595d012efccf12abf4abc08da2d97be0b0355a2b08d101347527476ba4"
"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
"checksum jpeg-decoder 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "c8b7d43206b34b3f94ea9445174bda196e772049b9bddbc620c9d29b2d20110d"
"checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14"
"checksum libc 0.2.58 (registry+https://github.com/rust-lang/crates.io-index)" = "6281b86796ba5e4366000be6e9e18bf35580adf9e63fbe2294aadb587613a319"
"checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084"
"checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
"checksum nodrop 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "2f9667ddcc6cc8a43afc9b7917599d7216aa09c463919ea32c59ed6cac8bc945"
"checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2"
"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
"checksum num_cpus 1.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "bcef43580c035376c0705c42792c294b66974abbfd2789b511784023f71f3273"
"checksum png 0.14.1 (registry+https://github.com/rust-lang/crates.io-index)" = "63daf481fdd0defa2d1d2be15c674fbfa1b0fd71882c303a91f9a79b3252c359"
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
"checksum quote 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faf4799c5d274f3868a4aae320a0a182cbd2baee377b378f080e16a23e9d80db"
"checksum rayon 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a4b0186e22767d5b9738a05eab7c6ac90b15db17e5b5f9bd87976dd7d89a10a4"
"checksum rayon-core 1.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebbe0df8435ac0c397d467b6cad6d25543d06e8a019ef3f6af3c384597515bd2"
"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
"checksum syn 0.15.39 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d960b829a55e56db167e861ddb43602c003c7be0bee1d345021703fac2fb7c"
"checksum tiff 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1e4834f28a0330cb9f3f2c87d2649dca723cb33802e2bdcf18da32759fbec7ce"
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"

View File

@ -4,7 +4,7 @@ version = "0.1.0"
authors = ["Thomas Forgione <thomas@tforgione.fr>"] authors = ["Thomas Forgione <thomas@tforgione.fr>"]
[dependencies] [dependencies]
image = "0.21.2" image = "0.23"
lazy_static = "0.2.11" lazy_static = "0.2.11"
[[bin]] [[bin]]

View File

@ -2,7 +2,7 @@
extern crate lazy_static; extern crate lazy_static;
extern crate image; extern crate image;
use image::{Pixel, GenericImage, ImageResult, Rgba, FilterType}; use image::{imageops::FilterType, GenericImage, ImageResult, Pixel, Rgba};
lazy_static! { lazy_static! {
/// This values is 20 * log10(255) /// This values is 20 * log10(255)
@ -12,19 +12,20 @@ lazy_static! {
/// Compute a MSE between an image and its color. /// Compute a MSE between an image and its color.
/// ///
/// Will panic an error if the two images don't have the same size. /// Will panic an error if the two images don't have the same size.
pub fn mse_color<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(img: &T, color: &Rgba<u8>) -> f64 { pub fn mse_color<P: Pixel<Subpixel = u8>, T: GenericImage<Pixel = P>>(
img: &T,
color: &Rgba<u8>,
) -> f64 {
let mut mse = 0.0; let mut mse = 0.0;
for x in 0 .. img.dimensions().0 { for x in 0..img.dimensions().0 {
for y in 0 .. img.dimensions().1 { for y in 0..img.dimensions().1 {
let p1 = img.get_pixel(x, y).to_rgba(); let p1 = img.get_pixel(x, y).to_rgba();
let dx = p1.data[0] as f64 - color.data[0] as f64; let dx = p1.0[0] as f64 - color.0[0] as f64;
let dy = p1.data[1] as f64 - color.data[1] as f64; let dy = p1.0[1] as f64 - color.0[1] as f64;
let dz = p1.data[2] as f64 - color.data[2] as f64; let dz = p1.0[2] as f64 - color.0[2] as f64;
let da = p1.data[3] as f64 - color.data[3] as f64; let da = p1.0[3] as f64 - color.0[3] as f64;
let dx = dx * dx; let dx = dx * dx;
let dy = dy * dy; let dy = dy * dy;
@ -41,22 +42,28 @@ pub fn mse_color<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(img: &T, color
/// Compute a MSE between two images. /// Compute a MSE between two images.
/// ///
/// Will panic an error if the two images don't have the same size. /// Will panic an error if the two images don't have the same size.
pub fn mse<P1: Pixel<Subpixel=u8>, T1: GenericImage<Pixel=P1>, P2: Pixel<Subpixel=u8>, T2: GenericImage<Pixel=P2>>(img1: &T1, img2: &T2) -> f64 { pub fn mse<
P1: Pixel<Subpixel = u8>,
T1: GenericImage<Pixel = P1>,
P2: Pixel<Subpixel = u8>,
T2: GenericImage<Pixel = P2>,
>(
img1: &T1,
img2: &T2,
) -> f64 {
assert_eq!(img1.dimensions(), img2.dimensions()); assert_eq!(img1.dimensions(), img2.dimensions());
let mut mse = 0.0; let mut mse = 0.0;
for x in 0 .. img1.dimensions().0 { for x in 0..img1.dimensions().0 {
for y in 0 .. img1.dimensions().1 { for y in 0..img1.dimensions().1 {
let p1 = img1.get_pixel(x, y).to_rgba(); let p1 = img1.get_pixel(x, y).to_rgba();
let p2 = img2.get_pixel(x, y).to_rgba(); let p2 = img2.get_pixel(x, y).to_rgba();
let dx = p1.data[0] as f64 - p2.data[0] as f64; let dx = p1.0[0] as f64 - p2.0[0] as f64;
let dy = p1.data[1] as f64 - p2.data[1] as f64; let dy = p1.0[1] as f64 - p2.0[1] as f64;
let dz = p1.data[2] as f64 - p2.data[2] as f64; let dz = p1.0[2] as f64 - p2.0[2] as f64;
let da = p1.data[3] as f64 - p2.data[3] as f64; let da = p1.0[3] as f64 - p2.0[3] as f64;
let dx = dx * dx; let dx = dx * dx;
let dy = dy * dy; let dy = dy * dy;
@ -71,22 +78,23 @@ pub fn mse<P1: Pixel<Subpixel=u8>, T1: GenericImage<Pixel=P1>, P2: Pixel<Subpixe
} }
/// Resizes img1 to the size of img2 and then compute the MSE between the images. /// Resizes img1 to the size of img2 and then compute the MSE between the images.
pub fn mse_resized<P: 'static + Pixel<Subpixel=u8>, T: 'static + GenericImage<Pixel=P>>(img1: &T, img2: &T, filter: FilterType) -> f64 { pub fn mse_resized<P: 'static + Pixel<Subpixel = u8>, T: 'static + GenericImage<Pixel = P>>(
img1: &T,
img2: &T,
filter: FilterType,
) -> f64 {
let img1 = image::imageops::resize(img1, img2.width(), img2.height(), filter); let img1 = image::imageops::resize(img1, img2.width(), img2.height(), filter);
mse(&img1, img2) mse(&img1, img2)
} }
/// Compute the PSNR from the MSE. /// Compute the PSNR from the MSE.
/// Returns 10 * log10(255^2) - 10 * log10(mse) /// Returns 10 * log10(255^2) - 10 * log10(mse)
pub fn mse_to_psnr(mse: f64) -> f64 { pub fn mse_to_psnr(mse: f64) -> f64 {
*TWENTY_LOG10_MAX - 10.0 * mse.log10() *TWENTY_LOG10_MAX - 10.0 * mse.log10()
} }
/// Computes the PSNR between two images of the same sizes. /// Computes the PSNR between two images of the same sizes.
pub fn psnr<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(img1: &T, img2: &T) -> f64 { pub fn psnr<P: Pixel<Subpixel = u8>, T: GenericImage<Pixel = P>>(img1: &T, img2: &T) -> f64 {
*TWENTY_LOG10_MAX - 10.0 * mse(img1, img2).log10() *TWENTY_LOG10_MAX - 10.0 * mse(img1, img2).log10()
} }
@ -100,18 +108,19 @@ pub fn psnr_files(path1: &str, path2: &str) -> ImageResult<f64> {
/// Compute a MSE between an image and its color. /// Compute a MSE between an image and its color.
/// ///
/// Will panic an error if the two images don't have the same size. /// Will panic an error if the two images don't have the same size.
pub fn mse_color_without_alpha<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(img: &T, color: &Rgba<u8>) -> f64 { pub fn mse_color_without_alpha<P: Pixel<Subpixel = u8>, T: GenericImage<Pixel = P>>(
img: &T,
color: &Rgba<u8>,
) -> f64 {
let mut mse = 0.0; let mut mse = 0.0;
for x in 0 .. img.dimensions().0 { for x in 0..img.dimensions().0 {
for y in 0 .. img.dimensions().1 { for y in 0..img.dimensions().1 {
let p1 = img.get_pixel(x, y).to_rgba(); let p1 = img.get_pixel(x, y).to_rgba();
let dx = p1.data[0] as f64 - color.data[0] as f64; let dx = p1.0[0] as f64 - color.0[0] as f64;
let dy = p1.data[1] as f64 - color.data[1] as f64; let dy = p1.0[1] as f64 - color.0[1] as f64;
let dz = p1.data[2] as f64 - color.data[2] as f64; let dz = p1.0[2] as f64 - color.0[2] as f64;
let dx = dx * dx; let dx = dx * dx;
let dy = dy * dy; let dy = dy * dy;
@ -127,21 +136,27 @@ pub fn mse_color_without_alpha<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(
/// Compute a MSE between two images. /// Compute a MSE between two images.
/// ///
/// Will panic an error if the two images don't have the same size. /// Will panic an error if the two images don't have the same size.
pub fn mse_without_alpha<P1: Pixel<Subpixel=u8>, T1: GenericImage<Pixel=P1>, P2: Pixel<Subpixel=u8>, T2: GenericImage<Pixel=P2>>(img1: &T1, img2: &T2) -> f64 { pub fn mse_without_alpha<
P1: Pixel<Subpixel = u8>,
T1: GenericImage<Pixel = P1>,
P2: Pixel<Subpixel = u8>,
T2: GenericImage<Pixel = P2>,
>(
img1: &T1,
img2: &T2,
) -> f64 {
assert_eq!(img1.dimensions(), img2.dimensions()); assert_eq!(img1.dimensions(), img2.dimensions());
let mut mse = 0.0; let mut mse = 0.0;
for x in 0 .. img1.dimensions().0 { for x in 0..img1.dimensions().0 {
for y in 0 .. img1.dimensions().1 { for y in 0..img1.dimensions().1 {
let p1 = img1.get_pixel(x, y).to_rgba(); let p1 = img1.get_pixel(x, y).to_rgba();
let p2 = img2.get_pixel(x, y).to_rgba(); let p2 = img2.get_pixel(x, y).to_rgba();
let dx = p1.data[0] as f64 - p2.data[0] as f64; let dx = p1.0[0] as f64 - p2.0[0] as f64;
let dy = p1.data[1] as f64 - p2.data[1] as f64; let dy = p1.0[1] as f64 - p2.0[1] as f64;
let dz = p1.data[2] as f64 - p2.data[2] as f64; let dz = p1.0[2] as f64 - p2.0[2] as f64;
let dx = dx * dx; let dx = dx * dx;
let dy = dy * dy; let dy = dy * dy;
@ -155,15 +170,23 @@ pub fn mse_without_alpha<P1: Pixel<Subpixel=u8>, T1: GenericImage<Pixel=P1>, P2:
} }
/// Resizes img1 to the size of img2 and then compute the MSE between the images. /// Resizes img1 to the size of img2 and then compute the MSE between the images.
pub fn mse_resized_without_alpha<P: 'static + Pixel<Subpixel=u8>, T: 'static + GenericImage<Pixel=P>>(img1: &T, img2: &T, filter: FilterType) -> f64 { pub fn mse_resized_without_alpha<
P: 'static + Pixel<Subpixel = u8>,
T: 'static + GenericImage<Pixel = P>,
>(
img1: &T,
img2: &T,
filter: FilterType,
) -> f64 {
let img1 = image::imageops::resize(img1, img2.width(), img2.height(), filter); let img1 = image::imageops::resize(img1, img2.width(), img2.height(), filter);
mse_without_alpha(&img1, img2) mse_without_alpha(&img1, img2)
} }
/// Computes the PSNR between two images of the same sizes. /// Computes the PSNR between two images of the same sizes.
pub fn psnr_without_alpha<P: Pixel<Subpixel=u8>, T: GenericImage<Pixel=P>>(img1: &T, img2: &T) -> f64 { pub fn psnr_without_alpha<P: Pixel<Subpixel = u8>, T: GenericImage<Pixel = P>>(
img1: &T,
img2: &T,
) -> f64 {
*TWENTY_LOG10_MAX - 10.0 * mse_without_alpha(img1, img2).log10() *TWENTY_LOG10_MAX - 10.0 * mse_without_alpha(img1, img2).log10()
} }