def renderCheck(self, mismatch=0, colortol=0, imgpath='', grpprefix=''): """Check rendered map canvas or existing image against control image :mismatch: number of pixels different from control, and still valid :colortol: maximum difference for each color component including alpha :imgpath: existing image; if present, skips rendering canvas :grpprefix: compare test image/rendering against different test group """ if not grpprefix: grpprefix = self._TestGroupPrefix chk = QgsMultiRenderChecker() chk.setControlPathPrefix('expected_' + grpprefix) chk.setControlName(self._Test) if imgpath: chk.setRenderedImage(imgpath) ms = self._MapSettings # class settings if self._TestMapSettings is not None: ms = self._TestMapSettings # per test settings chk.setMapSettings(ms) chk.setColorTolerance(colortol) # noinspection PyUnusedLocal res = chk.runTest(self._Test, mismatch) if PALREPORT and not res: # don't report ok checks testname = self._TestGroup + ' . ' + self._Test PALREPORTS[testname] = chk.report() msg = '\nRender check failed for "{0}"'.format(self._Test) return res, msg
def checkImage(self, name, reference_image, rendered_image, size_tolerance=0): checker = QgsMultiRenderChecker() checker.setControlPathPrefix("layout_exporter") checker.setControlName("expected_layoutexporter_" + reference_image) checker.setRenderedImage(rendered_image) checker.setColorTolerance(2) checker.setSizeTolerance(size_tolerance, size_tolerance) result = checker.runTest(name, 20) self.report += checker.report() print((self.report)) return result
def imageCheck(self, name, reference_image, image): self.report += "<h2>Render {}</h2>\n".format(name) temp_dir = QDir.tempPath() + '/' file_name = temp_dir + 'annotation_' + name + ".png" image.save(file_name, "PNG") checker = QgsMultiRenderChecker() checker.setControlPathPrefix("annotations") checker.setControlName("expected_" + reference_image) checker.setRenderedImage(file_name) checker.setColorTolerance(2) result = checker.runTest(name, 20) self.report += checker.report() print((self.report)) return result
def canvasImageCheck(self, name, reference_image, canvas): self.report += "<h2>Render {}</h2>\n".format(name) temp_dir = QDir.tempPath() + '/' file_name = temp_dir + 'mapcanvas_' + name + ".png" print(file_name) canvas.saveAsImage(file_name) checker = QgsMultiRenderChecker() checker.setControlPathPrefix("mapcanvas") checker.setControlName("expected_" + reference_image) checker.setRenderedImage(file_name) checker.setColorTolerance(2) result = checker.runTest(name, 20) self.report += checker.report() print((self.report)) return result
def imageCheck(self, name, reference_image, image, size_tolerance=0): TestQgsColorRampLegendNode.report += "<h2>Render {}</h2>\n".format( name) temp_dir = QDir.tempPath() + '/' file_name = temp_dir + name + ".png" image.save(file_name, "PNG") checker = QgsMultiRenderChecker() checker.setControlPathPrefix("color_ramp_legend_node") checker.setControlName("expected_" + reference_image) checker.setRenderedImage(file_name) checker.setColorTolerance(2) checker.setSizeTolerance(size_tolerance, size_tolerance) result = checker.runTest(name, 20) TestQgsColorRampLegendNode.report += checker.report() return result
def _pdf_diff(self, pdf, control_image, max_diff, max_size_diff=QSize(), dpi=96): temp_pdf = os.path.join(tempfile.gettempdir(), "%s_result.pdf" % control_image) with open(temp_pdf, "wb") as f: f.write(pdf) temp_image = os.path.join(tempfile.gettempdir(), "%s_result.png" % control_image) self._pdf_to_png(temp_pdf, temp_image, dpi=dpi, page=1) control = QgsMultiRenderChecker() control.setControlPathPrefix("qgis_server") control.setControlName(control_image) control.setRenderedImage(temp_image) if max_size_diff.isValid(): control.setSizeTolerance(max_size_diff.width(), max_size_diff.height()) return control.runTest(control_image, max_diff), control.report()
def canvasImageCheck(self, name, reference_image, canvas): self.report += "<h2>Render {}</h2>\n".format(name) temp_dir = QDir.tempPath() + '/' file_name = temp_dir + 'rendered_' + name + ".png" image = QImage(canvas.size(), QImage.Format_ARGB32) painter = QPainter(image) canvas.render(painter) painter.end() image.save(file_name) checker = QgsMultiRenderChecker() checker.setControlPathPrefix("highlight") checker.setControlName("expected_" + reference_image) checker.setRenderedImage(file_name) checker.setColorTolerance(2) result = checker.runTest(name, 20) self.report += checker.report() print((self.report)) return result
def _img_diff(self, image, control_image, max_diff, max_size_diff=QSize(), outputJpg=False): extFile = 'png' if outputJpg: extFile = 'jpg' temp_image = os.path.join(tempfile.gettempdir(), "%s_result.%s" % (control_image, extFile)) with open(temp_image, "wb") as f: f.write(image) if outputJpg: return (True, "QgsRenderChecker can't be used for JPG images") control = QgsMultiRenderChecker() control.setControlPathPrefix("qgis_server") control.setControlName(control_image) control.setRenderedImage(temp_image) if max_size_diff.isValid(): control.setSizeTolerance(max_size_diff.width(), max_size_diff.height()) return control.runTest(control_image, max_diff), control.report()