- working on adding DPI setting for PNG export in the Film Tool

This commit is contained in:
Marius Stanciu
2020-10-05 12:53:06 +03:00
committed by Marius
parent d5cf7b4980
commit f99a5a8073
7 changed files with 114 additions and 41 deletions

View File

@@ -9,7 +9,7 @@ from PyQt5 import QtCore, QtWidgets, QtGui
from appTool import AppTool
from appGUI.GUIElements import RadioSet, FCDoubleSpinner, FCCheckBox, \
OptionalHideInputSection, FCComboBox, FCFileSaveDialog, FCButton, FCLabel
OptionalHideInputSection, FCComboBox, FCFileSaveDialog, FCButton, FCLabel, FCSpinner
from copy import deepcopy
import logging
@@ -138,6 +138,8 @@ class Film(AppTool):
self.ui.orientation_radio.set_value(self.app.defaults["tools_film_orientation"])
self.ui.pagesize_combo.set_value(self.app.defaults["tools_film_pagesize"])
self.ui.png_dpi_spinner.set_value(self.app.defaults["tools_film_png_dpi"])
self.ui.tf_type_obj_combo.set_value('grb')
self.ui.tf_type_box_combo.set_value('grb')
# run once to update the obj_type attribute in the FCCombobox so the last object is showed in cb
@@ -187,8 +189,8 @@ class Film(AppTool):
def generate_positive_normal_film(self, name, boxname, factor, ftype='svg'):
log.debug("ToolFilm.Film.generate_positive_normal_film() started ...")
scale_factor_x = None
scale_factor_y = None
scale_factor_x = 1
scale_factor_y = 1
skew_factor_x = None
skew_factor_y = None
mirror = None
@@ -328,8 +330,8 @@ class Film(AppTool):
def generate_negative_film(self, name, boxname, factor, ftype='svg'):
log.debug("ToolFilm.Film.generate_negative_film() started ...")
scale_factor_x = None
scale_factor_y = None
scale_factor_x = 1
scale_factor_y = 1
skew_factor_x = None
skew_factor_y = None
mirror = None
@@ -390,7 +392,7 @@ class Film(AppTool):
def export_negative(self, obj_name, box_name, filename, boundary,
scale_stroke_factor=0.00,
scale_factor_x=None, scale_factor_y=None,
scale_factor_x=1, scale_factor_y=1,
skew_factor_x=None, skew_factor_y=None, skew_reference='center',
mirror=None,
use_thread=True, ftype='svg'):
@@ -434,6 +436,12 @@ class Film(AppTool):
self.app.inform.emit('[WARNING_NOTCL] %s: %s' % (_("No object Box. Using instead"), obj))
box = obj
new_png_dpi = self.ui.png_dpi_spinner.get_value()
dpi_rate = new_png_dpi / 96
if dpi_rate != 1:
scale_factor_x += dpi_rate
scale_factor_y += dpi_rate
def make_negative_film():
exported_svg = obj.export_svg(scale_stroke_factor=scale_stroke_factor,
scale_factor_x=scale_factor_x, scale_factor_y=scale_factor_y,
@@ -513,7 +521,10 @@ class Film(AppTool):
try:
doc_final = StringIO(doc_final)
drawing = svg2rlg(doc_final)
renderPM.drawToFile(drawing, filename, 'PNG')
if new_png_dpi == 96:
renderPM.drawToFile(drawing, filename, 'PNG')
else:
renderPM.drawToFile(drawing, filename, 'PNG', dpi=new_png_dpi)
except Exception as e:
log.debug("FilmTool.export_negative() --> PNG output --> %s" % str(e))
return 'fail'
@@ -566,7 +577,7 @@ class Film(AppTool):
def export_positive(self, obj_name, box_name, filename,
scale_stroke_factor=0.00,
scale_factor_x=None, scale_factor_y=None,
scale_factor_x=1, scale_factor_y=1,
skew_factor_x=None, skew_factor_y=None, skew_reference='center',
mirror=None, orientation_val='p', pagesize_val='A4', color_val='black', opacity_val=1.0,
use_thread=True, ftype='svg'):
@@ -620,6 +631,12 @@ class Film(AppTool):
color = color_val
transparency_level = opacity_val
new_png_dpi = self.ui.png_dpi_spinner.get_value()
dpi_rate = new_png_dpi / 96
if dpi_rate != 1:
scale_factor_x += dpi_rate
scale_factor_y += dpi_rate
def make_positive_film(p_size, orientation, color, transparency_level):
log.debug("FilmTool.export_positive().make_positive_film()")
@@ -692,7 +709,10 @@ class Film(AppTool):
try:
doc_final = StringIO(doc_final)
drawing = svg2rlg(doc_final)
renderPM.drawToFile(drawing, filename, 'PNG')
if new_png_dpi == 96:
renderPM.drawToFile(drawing, filename, 'PNG')
else:
renderPM.drawToFile(drawing, filename, 'PNG', dpi=new_png_dpi)
except Exception as e:
log.debug("FilmTool.export_positive() --> PNG output --> %s" % str(e))
return 'fail'
@@ -1199,6 +1219,20 @@ class FilmUI:
self.on_film_type(val='hide')
# PNG DPI
self.png_dpi_label = FCLabel('%s:' % "PNG DPI")
self.png_dpi_label.setToolTip(
_("Default value is 96 DPI. Change this value to scale the PNG file.")
)
self.png_dpi_spinner = FCSpinner(callback=self.confirmation_message_int)
self.png_dpi_spinner.set_range(0, 100000)
grid1.addWidget(self.png_dpi_label, 4, 0)
grid1.addWidget(self.png_dpi_spinner, 4, 1)
self.png_dpi_label.hide()
self.png_dpi_spinner.hide()
# Buttons
self.film_object_button = FCButton(_("Save Film"))
self.film_object_button.setIcon(QtGui.QIcon(self.app.resource_location + '/save_as.png'))
@@ -1214,7 +1248,7 @@ class FilmUI:
font-weight: bold;
}
""")
grid1.addWidget(self.film_object_button, 4, 0, 1, 2)
grid1.addWidget(self.film_object_button, 6, 0, 1, 2)
self.layout.addStretch()
@@ -1254,11 +1288,22 @@ class FilmUI:
self.orientation_radio.show()
self.pagesize_label.show()
self.pagesize_combo.show()
self.png_dpi_label.hide()
self.png_dpi_spinner.hide()
elif val == 'png':
self.png_dpi_label.show()
self.png_dpi_spinner.show()
self.orientation_label.hide()
self.orientation_radio.hide()
self.pagesize_label.hide()
self.pagesize_combo.hide()
else:
self.orientation_label.hide()
self.orientation_radio.hide()
self.pagesize_label.hide()
self.pagesize_combo.hide()
self.png_dpi_label.hide()
self.png_dpi_spinner.hide()
def on_punch_source(self, val):
if val == 'pad' and self.punch_cb.get_value():