Files
herolib/lib/conversiontools/imagemagick/image_downsize.v
2025-07-21 06:18:46 +02:00

91 lines
2.5 KiB
V

module imagemagick
import freeflowuniverse.herolib.core.pathlib
import freeflowuniverse.herolib.osal.core as osal
import freeflowuniverse.herolib.ui.console
import os
@[params]
struct DownsizeArgsInternal {
backup bool
backup_root string
backup_dest string
redo bool
convertpng bool
}
// will downsize to reasonable size based on x
pub fn (mut image Image) downsize(args DownsizeArgsInternal) ! {
if image.path.is_link() {
return error('cannot downsize if path is link.\n${image}')
}
image.init_()!
if image.skip() {
return
}
// $if debug{console.print_header(' downsize $image.path')}
if image.is_png() {
image.identify_verbose()!
} else {
image.identify()!
}
// check in params
if args.backup {
image.path.backup(dest: args.backup_dest, root: args.backup_root)!
}
if image.is_png() {
if image.size_kbyte > 500 && image.size_x > 2400 {
image.size_kbyte = 0
console.print_debug(' - resize 50%: ${image.path.path}')
cmd := "convert '${image.path.path}' -resize 50% '${image.path.path}'"
osal.execute_silent(cmd) or {
return error('could not convert to png --resize 50%.\n${cmd} .\n${error}')
}
// console.print_debug(image)
image.init_()!
} else if image.size_kbyte > 500 && image.size_x > 1600 {
image.size_kbyte = 0
console.print_debug(' - resize 75%: ${image.path.path}')
cmd := "convert '${image.path.path}' -resize 75% '${image.path.path}'"
osal.execute_silent(cmd) or {
return error('could not convert to png --resize 75%.\n${cmd} \n${error}')
}
image.init_()!
}
}
if image.is_png() && args.convertpng {
if image.size_kbyte > 500 {
if image.transparent && image.size_kbyte < 900 {
console.print_header(' image ${image.path.path} sizekb:${image.size_kbyte} transparent so skip. ')
return
}
path_dest := image.path.path_no_ext() + '.jpg'
console.print_debug(' - convert to png: ${path_dest.str()}')
cmd := "convert '${image.path.path}' '${path_dest}'"
if os.exists(path_dest) {
os.rm(path_dest)!
}
osal.execute_silent(cmd) or {
return error('could not convert png to jpg.\n${cmd} \n${error}')
}
if os.exists(image.path.path) {
os.rm(image.path.path)!
}
image.path = pathlib.get(path_dest)
}
}
mut parent := image.path.parent()!
mut p := parent.file_get_new('.done')!
mut c := p.read()!
if c.contains(image.path.name()) {
console.print_debug(image.str())
print_backtrace()
panic('bug')
}
c += '${image.path.name()}\n'
p.write(c)!
}