首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReportLab图像“在canvas.Canvas上绘制”

ReportLab图像“在canvas.Canvas上绘制”
EN

Stack Overflow用户
提问于 2011-05-26 10:06:45
回答 5查看 7.3K关注 0票数 6

ReportLab的图像显示在PDF画布上,有以下代码片段:

代码语言:javascript
复制
from reportlab.pdfgen import canvas
from reportlab.platypus import Image

pdf = canvas.Canvas(filename, bottomup=0)

logo_image = Image(
    "%s/images/wsp_logo.jpg" % settings.STATIC_ROOT,
    width=200,
    height=200) 
logo_image.drawOn(pdf, 100, 100)

如何将它画成“正常”,就像人们期望看到的那样?

EN

回答 5

Stack Overflow用户

发布于 2012-08-03 06:44:30

使用canvas.scale函数翻转图像。

代码语言:javascript
复制
canvas.saveState()
canvas.translate(x, y)
canvas.scale(1,-1)
canvas.drawImage(img_path, 0, 0, width=-width, height=-height, mask='auto')
canvas.restoreState()
票数 5
EN

Stack Overflow用户

发布于 2011-05-27 11:01:14

目前我无法进行测试,但这可能是因为您在创建bottomup = 0对象时使用了Canvas。默认情况是1。来自文档

自下而上的参数切换坐标系统。一些图形系统(如PDF和PostScript)将(0,0)放在页面的左下角,另一些(如许多图形用户界面GUI)将origen放在左上角。自下而上的参数被废弃,并可能在将来被删除。 需要看看它是否真的适用于所有的任务,如果没有,那么就把它处理掉。

考虑到该引语中的警告,我猜想将其设置为0是问题的根源。

票数 3
EN

Stack Overflow用户

发布于 2022-07-22 15:58:43

我认为如果你把问题的标题改为与实际问题一致,那就更合适了。

最近,我遇到了同样的问题,一个徽标无缘无故地出现了镜像,而另一个图像文件却没有以完全相同的代码镜像。我无法解释这个问题,但我不知道reportlab是如何使用PIL库的,也不知道后台在使用什么算法。我有一个带有非常奇怪的角度的徽标,所以它很可能试图在后台调试时镜像它,以假设原始图像是镜像的。

在没有自己实际镜像映像文件的情况下(为了允许reportlab重新镜像它),我用画布创建了这个黑客(并使用了drawImage),以使徽标显示为正常:

其中'c‘是我的画布变量:

代码语言:javascript
复制
        c.saveState()
        c.scale(1,-1)
  
        c.drawImage(logo1, width=100, x=100, y=-100, preserveAspectRatio=True, mask='auto')

        c.restoreState()

我看到有人也提供了类似的答案。但是当你将画布缩放到(1,-1)时,我的回答可以增加这样的想法:你应该在图像上使用约为-100的y值,这样如果使用A4或字母页大小,就可以在画布上看到图像。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6136856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档