Delete image resize
This commit is contained in:
parent
b6b1b8eeed
commit
d1fe41cbee
3 changed files with 63 additions and 331 deletions
258
Cargo.lock
generated
258
Cargo.lock
generated
|
@ -314,12 +314,6 @@ version = "0.21.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
|
checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bit_field"
|
|
||||||
version = "0.10.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "1.3.2"
|
version = "1.3.2"
|
||||||
|
@ -628,30 +622,6 @@ dependencies = [
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-deque"
|
|
||||||
version = "0.8.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-epoch",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-epoch"
|
|
||||||
version = "0.9.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"cfg-if",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"memoffset 0.9.0",
|
|
||||||
"scopeguard",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.16"
|
version = "0.8.16"
|
||||||
|
@ -661,12 +631,6 @@ dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crunchy"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crypto-common"
|
name = "crypto-common"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
@ -704,12 +668,6 @@ dependencies = [
|
||||||
"syn 2.0.39",
|
"syn 2.0.39",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cty"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "data-encoding"
|
name = "data-encoding"
|
||||||
version = "2.4.0"
|
version = "2.4.0"
|
||||||
|
@ -907,32 +865,6 @@ dependencies = [
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "exr"
|
|
||||||
version = "1.71.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8"
|
|
||||||
dependencies = [
|
|
||||||
"bit_field",
|
|
||||||
"flume",
|
|
||||||
"half",
|
|
||||||
"lebe",
|
|
||||||
"miniz_oxide",
|
|
||||||
"rayon-core",
|
|
||||||
"smallvec",
|
|
||||||
"zune-inflate",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fast_image_resize"
|
|
||||||
version = "2.7.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cc789a40040e11bbe4ba31ca319406805a12fe3f8d71314bbc4bd076602ad55a"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
"thiserror",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "fastrand"
|
||||||
version = "1.9.0"
|
version = "1.9.0"
|
||||||
|
@ -977,15 +909,6 @@ dependencies = [
|
||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "flume"
|
|
||||||
version = "0.11.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
|
|
||||||
dependencies = [
|
|
||||||
"spin",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fnv"
|
name = "fnv"
|
||||||
version = "1.0.7"
|
version = "1.0.7"
|
||||||
|
@ -1277,26 +1200,6 @@ dependencies = [
|
||||||
"wasi 0.11.0+wasi-snapshot-preview1",
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gexiv2-sys"
|
|
||||||
version = "1.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c4edf7a47be383873c52eb34426723c7c9b040f9e58cf5088f2253cef149daf1"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
"pkg-config",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gif"
|
|
||||||
version = "0.12.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
|
|
||||||
dependencies = [
|
|
||||||
"color_quant",
|
|
||||||
"weezl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gimli"
|
name = "gimli"
|
||||||
version = "0.28.0"
|
version = "0.28.0"
|
||||||
|
@ -1464,15 +1367,6 @@ dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "half"
|
|
||||||
version = "2.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
|
|
||||||
dependencies = [
|
|
||||||
"crunchy",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.12.3"
|
version = "0.12.3"
|
||||||
|
@ -1627,14 +1521,8 @@ dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"color_quant",
|
"color_quant",
|
||||||
"exr",
|
|
||||||
"gif",
|
|
||||||
"jpeg-decoder",
|
|
||||||
"num-rational",
|
"num-rational",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"png",
|
|
||||||
"qoi",
|
|
||||||
"tiff",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1677,6 +1565,15 @@ dependencies = [
|
||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "0.4.8"
|
version = "0.4.8"
|
||||||
|
@ -1734,15 +1631,6 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "jpeg-decoder"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
|
|
||||||
dependencies = [
|
|
||||||
"rayon",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kuchikiki"
|
name = "kuchikiki"
|
||||||
version = "0.8.2"
|
version = "0.8.2"
|
||||||
|
@ -1762,12 +1650,6 @@ 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"
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lebe"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.150"
|
version = "0.2.150"
|
||||||
|
@ -1888,6 +1770,12 @@ dependencies = [
|
||||||
"unicase",
|
"unicase",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "minimal-lexical"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miniz_oxide"
|
name = "miniz_oxide"
|
||||||
version = "0.7.1"
|
version = "0.7.1"
|
||||||
|
@ -1929,20 +1817,22 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "native-dialog"
|
name = "native-dialog"
|
||||||
version = "0.6.4"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bbf55edb2747e4e4b3a9cd3989194b88aae32274b4422635dcf98aa6e84197b"
|
checksum = "84e7038885d2aeab236bd60da9e159a5967b47cde3292da3b15ff1bec27c039f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ascii",
|
"ascii",
|
||||||
"block",
|
"block",
|
||||||
"cocoa 0.24.1",
|
"cocoa 0.25.0",
|
||||||
|
"core-foundation",
|
||||||
"dirs-next",
|
"dirs-next",
|
||||||
"objc",
|
"objc",
|
||||||
"objc-foundation",
|
"objc-foundation",
|
||||||
"objc_id",
|
"objc_id",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"raw-window-handle 0.4.3",
|
"raw-window-handle",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
"versions",
|
||||||
"wfd",
|
"wfd",
|
||||||
"which",
|
"which",
|
||||||
"winapi",
|
"winapi",
|
||||||
|
@ -1958,7 +1848,7 @@ dependencies = [
|
||||||
"jni-sys",
|
"jni-sys",
|
||||||
"ndk-sys",
|
"ndk-sys",
|
||||||
"num_enum",
|
"num_enum",
|
||||||
"raw-window-handle 0.5.2",
|
"raw-window-handle",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -2001,6 +1891,16 @@ version = "0.1.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
|
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nom"
|
||||||
|
version = "7.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
"minimal-lexical",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-integer"
|
||||||
version = "0.1.45"
|
version = "0.1.45"
|
||||||
|
@ -2461,15 +2361,6 @@ dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "qoi"
|
|
||||||
version = "0.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
|
|
||||||
dependencies = [
|
|
||||||
"bytemuck",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.33"
|
version = "1.0.33"
|
||||||
|
@ -2560,41 +2451,12 @@ dependencies = [
|
||||||
"rand_core 0.5.1",
|
"rand_core 0.5.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "raw-window-handle"
|
|
||||||
version = "0.4.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
|
|
||||||
dependencies = [
|
|
||||||
"cty",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "raw-window-handle"
|
name = "raw-window-handle"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
|
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon"
|
|
||||||
version = "1.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
|
|
||||||
dependencies = [
|
|
||||||
"either",
|
|
||||||
"rayon-core",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rayon-core"
|
|
||||||
version = "1.12.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-deque",
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
|
@ -2644,17 +2506,6 @@ version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
|
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rexiv2"
|
|
||||||
version = "0.10.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "11ecb9dccad43fea1bf58ea7bb8e34614446bea8aa00f78add6624d7ee26fb87"
|
|
||||||
dependencies = [
|
|
||||||
"gexiv2-sys",
|
|
||||||
"libc",
|
|
||||||
"num-rational",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rust-embed"
|
name = "rust-embed"
|
||||||
version = "8.0.0"
|
version = "8.0.0"
|
||||||
|
@ -2910,14 +2761,10 @@ dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
"directories",
|
"directories",
|
||||||
"fast_image_resize",
|
|
||||||
"image",
|
|
||||||
"log",
|
"log",
|
||||||
"native-dialog",
|
"native-dialog",
|
||||||
"rexiv2",
|
|
||||||
"rust-embed",
|
"rust-embed",
|
||||||
"simplelog",
|
"simplelog",
|
||||||
"tempfile",
|
|
||||||
"tokio",
|
"tokio",
|
||||||
"warp",
|
"warp",
|
||||||
"wry",
|
"wry",
|
||||||
|
@ -3006,9 +2853,6 @@ name = "spin"
|
||||||
version = "0.9.8"
|
version = "0.9.8"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
dependencies = [
|
|
||||||
"lock_api",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stable_deref_trait"
|
name = "stable_deref_trait"
|
||||||
|
@ -3125,7 +2969,7 @@ dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"png",
|
"png",
|
||||||
"raw-window-handle 0.5.2",
|
"raw-window-handle",
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
"serde",
|
"serde",
|
||||||
"tao-macros",
|
"tao-macros",
|
||||||
|
@ -3214,17 +3058,6 @@ dependencies = [
|
||||||
"syn 2.0.39",
|
"syn 2.0.39",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tiff"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
|
|
||||||
dependencies = [
|
|
||||||
"flate2",
|
|
||||||
"jpeg-decoder",
|
|
||||||
"weezl",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.30"
|
version = "0.3.30"
|
||||||
|
@ -3542,6 +3375,16 @@ version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "versions"
|
||||||
|
version = "5.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c73a36bc44e3039f51fbee93e39f41225f6b17b380eb70cc2aab942df06b34dd"
|
||||||
|
dependencies = [
|
||||||
|
"itertools",
|
||||||
|
"nom",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "waker-fn"
|
name = "waker-fn"
|
||||||
version = "1.1.1"
|
version = "1.1.1"
|
||||||
|
@ -3690,12 +3533,6 @@ dependencies = [
|
||||||
"windows-core",
|
"windows-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "weezl"
|
|
||||||
version = "0.1.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wfd"
|
name = "wfd"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
|
@ -4066,15 +3903,6 @@ dependencies = [
|
||||||
"zvariant",
|
"zvariant",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zune-inflate"
|
|
||||||
version = "0.2.54"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
|
|
||||||
dependencies = [
|
|
||||||
"simd-adler32",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zvariant"
|
name = "zvariant"
|
||||||
version = "3.15.0"
|
version = "3.15.0"
|
||||||
|
|
|
@ -8,13 +8,9 @@ anyhow = "1.0"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
simplelog = "0.12"
|
simplelog = "0.12"
|
||||||
wry = "0.34"
|
wry = "0.34"
|
||||||
native-dialog = "0.6"
|
native-dialog = "0.7"
|
||||||
rust-embed = "8"
|
rust-embed = "8"
|
||||||
directories = "5"
|
directories = "5"
|
||||||
clap = "4"
|
clap = "4"
|
||||||
warp = "0.3"
|
warp = "0.3"
|
||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
image = "0.24"
|
|
||||||
rexiv2 = "0.10"
|
|
||||||
tempfile = "3"
|
|
||||||
fast_image_resize = "2"
|
|
110
src/main.rs
110
src/main.rs
|
@ -2,15 +2,11 @@
|
||||||
|
|
||||||
use anyhow::{anyhow, bail, Result};
|
use anyhow::{anyhow, bail, Result};
|
||||||
use clap::{Arg, Command};
|
use clap::{Arg, Command};
|
||||||
use fast_image_resize as fr;
|
|
||||||
use image::{io::Reader as ImageReader, DynamicImage};
|
|
||||||
use log::info;
|
use log::info;
|
||||||
use native_dialog::{FileDialog, MessageDialog};
|
use native_dialog::{FileDialog, MessageDialog};
|
||||||
use rexiv2::Metadata;
|
|
||||||
use rust_embed::RustEmbed;
|
use rust_embed::RustEmbed;
|
||||||
use simplelog::{ColorChoice, ConfigBuilder, LevelFilter, TermLogger, TerminalMode};
|
use simplelog::{ColorChoice, ConfigBuilder, LevelFilter, TermLogger, TerminalMode};
|
||||||
use std::{fs::File, io::BufWriter, num::NonZeroU32, path::PathBuf, thread::JoinHandle};
|
use std::{borrow::Cow, path::PathBuf, thread::JoinHandle};
|
||||||
use tempfile::tempdir;
|
|
||||||
use warp::Filter;
|
use warp::Filter;
|
||||||
use wry::{
|
use wry::{
|
||||||
application::{
|
application::{
|
||||||
|
@ -37,9 +33,10 @@ fn main() -> Result<()> {
|
||||||
ColorChoice::Auto,
|
ColorChoice::Auto,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let tmp_dir = tempdir()?;
|
|
||||||
|
|
||||||
let cmd = Command::new("Simple panorama viewer")
|
let cmd = Command::new("Simple panorama viewer")
|
||||||
|
.version(env!("CARGO_PKG_VERSION"))
|
||||||
|
.author(env!("CARGO_PKG_AUTHORS"))
|
||||||
|
.about(env!("CARGO_PKG_DESCRIPTION"))
|
||||||
.arg(
|
.arg(
|
||||||
Arg::new("filename")
|
Arg::new("filename")
|
||||||
.value_parser(clap::value_parser!(PathBuf))
|
.value_parser(clap::value_parser!(PathBuf))
|
||||||
|
@ -48,7 +45,7 @@ fn main() -> Result<()> {
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let img_path = if let Some(img_path) = cmd.get_one::<PathBuf>("filename") {
|
let img_path = if let Some(img_path) = cmd.get_one::<PathBuf>("filename") {
|
||||||
img_path.clone()
|
Cow::Borrowed(img_path)
|
||||||
} else {
|
} else {
|
||||||
let user_dirs = directories::UserDirs::new().unwrap();
|
let user_dirs = directories::UserDirs::new().unwrap();
|
||||||
let dir = if let Some(img_dir) = user_dirs.picture_dir() {
|
let dir = if let Some(img_dir) = user_dirs.picture_dir() {
|
||||||
|
@ -56,6 +53,7 @@ fn main() -> Result<()> {
|
||||||
} else {
|
} else {
|
||||||
user_dirs.home_dir()
|
user_dirs.home_dir()
|
||||||
};
|
};
|
||||||
|
Cow::Owned(
|
||||||
FileDialog::new()
|
FileDialog::new()
|
||||||
.add_filter(
|
.add_filter(
|
||||||
"Images",
|
"Images",
|
||||||
|
@ -65,7 +63,8 @@ fn main() -> Result<()> {
|
||||||
)
|
)
|
||||||
.set_location(dir)
|
.set_location(dir)
|
||||||
.show_open_single_file()?
|
.show_open_single_file()?
|
||||||
.ok_or_else(|| anyhow!("No file"))?
|
.ok_or_else(|| anyhow!("No file"))?,
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
if !img_path.exists() {
|
if !img_path.exists() {
|
||||||
|
@ -77,53 +76,8 @@ fn main() -> Result<()> {
|
||||||
bail!("File `{}` does not exist !", img_path.display());
|
bail!("File `{}` does not exist !", img_path.display());
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("Open `{}`", img_path.display());
|
|
||||||
let (width, height) = image::image_dimensions(&img_path)?;
|
|
||||||
const MAX_IMG_SIZE: u32 = 20_000_000;
|
|
||||||
info!("Image size {} * {}", width, height);
|
|
||||||
let img_data_path = if height * width > MAX_IMG_SIZE {
|
|
||||||
// @todo Option pas de resize / taille en ligne de commande
|
|
||||||
// @todo Option pas de resize / taille dans une config (confy)
|
|
||||||
// @todo Demande ensergistre l’action la première fois
|
|
||||||
// @todo Option always en ligne de commnade
|
|
||||||
// @todo Icon
|
|
||||||
// @todo no dialog with v0.7
|
|
||||||
let ratio = (height * width) as f64 / MAX_IMG_SIZE as f64;
|
|
||||||
let new_height = (height as f64 / ratio.sqrt()) as u32;
|
|
||||||
let new_width = (width as f64 / ratio.sqrt()) as u32;
|
|
||||||
|
|
||||||
if MessageDialog::new()
|
|
||||||
.set_title("Resize")
|
|
||||||
.set_type(native_dialog::MessageType::Info)
|
|
||||||
.set_text(&format!(
|
|
||||||
"Resize the file to {} × {}",
|
|
||||||
new_width, new_height
|
|
||||||
))
|
|
||||||
.show_confirm()?
|
|
||||||
{
|
|
||||||
// Resize image
|
|
||||||
let img = ImageReader::open(&img_path)?.decode()?;
|
|
||||||
info!("Resize image to {} × {}", new_width, new_height);
|
|
||||||
let image_resized = fast_image_resize(&img, new_width, new_height)?;
|
|
||||||
|
|
||||||
// Save file and add metadata
|
|
||||||
let tmp_img_path = tmp_dir.path().join("img.jpg");
|
|
||||||
image_resized.write_to(
|
|
||||||
&mut BufWriter::new(File::create(&tmp_img_path)?),
|
|
||||||
image::ImageOutputFormat::Jpeg(95),
|
|
||||||
)?;
|
|
||||||
let metadata = Metadata::new_from_path(&img_path)?;
|
|
||||||
metadata.save_to_file(&tmp_img_path)?;
|
|
||||||
tmp_img_path
|
|
||||||
} else {
|
|
||||||
img_path
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
img_path
|
|
||||||
};
|
|
||||||
|
|
||||||
info!("Run server");
|
info!("Run server");
|
||||||
run_server(img_data_path);
|
run_server(img_path.to_path_buf());
|
||||||
|
|
||||||
info!("Create webview");
|
info!("Create webview");
|
||||||
let event_loop = EventLoop::new();
|
let event_loop = EventLoop::new();
|
||||||
|
@ -192,49 +146,3 @@ fn get_file_data(filename: &str) -> String {
|
||||||
"".to_string()
|
"".to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Fast resize
|
|
||||||
pub fn fast_image_resize(
|
|
||||||
img: &DynamicImage,
|
|
||||||
max_width: u32,
|
|
||||||
max_height: u32,
|
|
||||||
) -> Result<DynamicImage> {
|
|
||||||
// Create source image
|
|
||||||
let width = NonZeroU32::new(img.width()).unwrap();
|
|
||||||
let height = NonZeroU32::new(img.height()).unwrap();
|
|
||||||
let src_image =
|
|
||||||
fr::Image::from_vec_u8(width, height, img.to_rgb8().into_raw(), fr::PixelType::U8x3)?;
|
|
||||||
let mut src_view = src_image.view();
|
|
||||||
|
|
||||||
// Create container for data of destination image
|
|
||||||
let (dst_width, dst_height) = if width > height {
|
|
||||||
(
|
|
||||||
NonZeroU32::new(max_width).unwrap(),
|
|
||||||
NonZeroU32::new((max_width * img.height()) / img.width()).unwrap(),
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
(
|
|
||||||
NonZeroU32::new((max_height * img.width()) / img.height()).unwrap(),
|
|
||||||
NonZeroU32::new(max_height).unwrap(),
|
|
||||||
)
|
|
||||||
};
|
|
||||||
src_view.set_crop_box_to_fit_dst_size(dst_width, dst_height, None);
|
|
||||||
let mut dst_image = fr::Image::new(dst_width, dst_height, src_view.pixel_type());
|
|
||||||
|
|
||||||
// Get mutable view of destination image data
|
|
||||||
let mut dst_view = dst_image.view_mut();
|
|
||||||
|
|
||||||
// Create Resizer instance and resize source image into buffer of destination image
|
|
||||||
let mut resizer = fr::Resizer::new(fr::ResizeAlg::Convolution(fr::FilterType::Lanczos3));
|
|
||||||
resizer.resize(&src_view, &mut dst_view)?;
|
|
||||||
|
|
||||||
// Create Dynamic image
|
|
||||||
let img_buffer = image::RgbImage::from_raw(
|
|
||||||
dst_image.width().get(),
|
|
||||||
dst_image.height().get(),
|
|
||||||
dst_image.into_vec(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
Ok(img_buffer.into())
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in a new issue