From b612eb0e3074461d4c84447185b20addc5b0e4a5 Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Wed, 12 Feb 2020 19:48:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=B2=D0=BB=D0=B5=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D1=8B.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=BC=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- press-n-post | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 66 insertions(+), 12 deletions(-) diff --git a/press-n-post b/press-n-post index 0f81abd..e9ac797 100755 --- a/press-n-post +++ b/press-n-post @@ -25,8 +25,7 @@ package require platform # # REQUIREMENTS: -# ghostscript -# imagemagick +# imagemagick + ghostscript # cwebp # exiftool # resmushit-cli @@ -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 { # Функции для работы с изображениями namespace eval cover { + # Страница для извлечения обложки + set page 1 + + # Рамка обложки по умолчанию + set border 0 + + # Качество извлекаемого изображения + set density 300 + set quality 100 + # Размер текущего изображения set size {} @@ -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 { 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 { 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 { .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 { 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 } }