|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|