Browse Source

Извлечение произвольной страницы. Добавление рамки

master
Maxim Likhachev 5 years ago
parent
commit
b612eb0e30
  1. 78
      press-n-post

78
press-n-post

@ -25,8 +25,7 @@ package require platform @@ -25,8 +25,7 @@ package require platform
#
# REQUIREMENTS:
# ghostscript
# imagemagick
# imagemagick + ghostscript
# cwebp
# exiftool
# resmushit-cli
@ -61,7 +60,7 @@ namespace eval pdf { @@ -61,7 +60,7 @@ namespace eval pdf {
if {[string match "macosx*" [::platform::generic]]} {
set viewer open
} else {
set viewer xdg-open
set viewer zathura
}
# Markdown-шаблон
@ -223,6 +222,16 @@ namespace eval pdf { @@ -223,6 +222,16 @@ namespace eval pdf {
# Функции для работы с изображениями
namespace eval cover {
# Страница для извлечения обложки
set page 1
# Рамка обложки по умолчанию
set border 0
# Качество извлекаемого изображения
set density 300
set quality 100
# Размер текущего изображения
set size {}
@ -253,13 +262,43 @@ namespace eval cover { @@ -253,13 +262,43 @@ namespace eval cover {
# Извлечение первой страницы файла
proc extract {} {
exec convert "${::pdf::file}\[0\]" "${::pdf::file_rootname}.jpg"
exec convert \
-density $::cover::density \
-quality $::cover::quality \
"${::pdf::file}\[[expr {$::cover::page - 1}]\]" \
"${::pdf::file_rootname}.jpg"
}
# Добавление рамки
proc add_border {{width 1}} {
exec convert "${::pdf::file_rootname}.jpg" \
-bordercolor black \
-border $width \
"${::pdf::file_rootname}.jpg"
}
# Добавление рамки
proc del_border {{width 1}} {
exec convert "${::pdf::file_rootname}.jpg" \
-bordercolor black \
-border $width \
-fuzz 4% \
-trim "${::pdf::file_rootname}.jpg"
}
# Переключение рамки
proc toggle_border {{width 1}} {
if {$::cover::border == 1} {
add_border $width
} else {
del_border $width
}
}
# Создание webp-вариантов изображений
proc make_webp {} {
exec cwebp "${::pdf::file_rootname}.jpg" -o "${::pdf::file_rootname}.webp" >&-
exec cwebp "${::pdf::file_rootname}.th.jpg" -o "${::pdf::file_rootname}.th.webp" >&-
catch {exec cwebp "${::pdf::file_rootname}.jpg" -o "${::pdf::file_rootname}.webp" >/dev/null}
catch {exec cwebp "${::pdf::file_rootname}.th.jpg" -o "${::pdf::file_rootname}.th.webp" >/dev/null}
}
# Оптимизация изображений
@ -457,7 +496,7 @@ namespace eval gui { @@ -457,7 +496,7 @@ namespace eval gui {
set h [image height $im]
set w [image width $im]
set ::cover::size "${h}x${w}"
set ::cover::size "${w}x${h}"
exec convert -resize x${mx_ht} "${::pdf::file_rootname}.jpg" "/tmp/${::pdf::file_basename}.publish_tmp.jpg"
set new [image create photo -file "/tmp/${::pdf::file_basename}.publish_tmp.jpg"]
@ -598,6 +637,18 @@ namespace eval gui { @@ -598,6 +637,18 @@ namespace eval gui {
frame .img.resize
label .img.resize.page_label -text "Страница:"
spinbox .img.resize.page_entry -textvariable ::cover::page -width 2 -from 0 -to 10 -command {
::cover::extract
::gui::image::load $::gui::cover_image
set ::cover::border 0
}
checkbutton .img.resize.border -text "Рамка" -variable ::cover::border -command {
::cover::toggle_border
::gui::image::load $::gui::cover_image
}
label .img.resize.size_label -text "Размер изображения:"
entry .img.resize.size_entry -textvariable ::cover::size -width 10
@ -606,10 +657,13 @@ namespace eval gui { @@ -606,10 +657,13 @@ namespace eval gui {
.img.resize.sizes set [lindex $::cover::sizes 0]
grid .img.resize.size_label -row 0 -column 0 -sticky w
grid .img.resize.size_entry -row 0 -column 1 -sticky w
grid .img.resize.resize_label -row 0 -column 2 -sticky w
grid .img.resize.sizes -row 0 -column 3 -sticky w
grid .img.resize.page_label -row 0 -column 0 -sticky w
grid .img.resize.page_entry -row 0 -column 1 -sticky w
grid .img.resize.border -row 0 -column 2 -sticky w
grid .img.resize.size_label -row 0 -column 3 -sticky w
grid .img.resize.size_entry -row 0 -column 4 -sticky w
grid .img.resize.resize_label -row 0 -column 5 -sticky w
grid .img.resize.sizes -row 0 -column 6 -sticky w
frame .img.buttons
@ -737,7 +791,7 @@ namespace eval gui { @@ -737,7 +791,7 @@ namespace eval gui {
namespace eval main {
# Удаление временных данных
proc remove_tmp_data {} {
foreach tmp_file [glob "/tmp/*.publish_tmp.jpg"] {
foreach tmp_file [glob -nocomplain "/tmp/*.publish_tmp.jpg"] {
file delete $tmp_file
}
}

Loading…
Cancel
Save