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

Loading…
Cancel
Save