【问题标题】:paint decoded jpeg to cairo surface将解码的 jpeg 绘制到 cairo 表面
【发布时间】:2012-11-19 13:54:30
【问题描述】:

我正在尝试将解码的 jpeg 绘制到开罗表面... 但是我有点卡住了,我不知道如何继续前进

import cairo
import Image

path_to_jpeg = "/home/seif/Pictures/prw.jpg"
surface = cairo.PDFSurface ("out.pdf", 1000, 1000)
ctx = cairo.Context (surface)

image = cairo.ImageSurface(cairo.FORMAT_ARGB32, 1000, 1000)
dt = Image.open(path_to_jpeg)
dimage = dt.load()

任何帮助将不胜感激......

【问题讨论】:

  • 你想达到什么目的。是否要将 jpg 图像添加到 pdf 中。
  • 这应该可以解决您的问题Place image over PDF
  • 它需要使用 cairo 来完成 :( 因为我们需要将它与 weazyprint 集成

标签: python jpeg decode cairo


【解决方案1】:

这应该可以解决问题。您必须首先将图像转换为 png,这似乎是您可以用来创建表面的唯一格式。这就是下面的大部分代码正在做的事情。我建议您查看this question,这对我创建下面的代码有很大帮助。

import Image, StringIO
from cairo import PDFSurface, Context, ImageSurface

pdf = PDFSurface("out.pdf", 1000, 1000)
cr = Context(pdf)
im = Image.open("/home/seif/Pictures/prw.jpg")
buffer = StringIO.StringIO()
im.save(buffer, format="PNG")
buffer.seek(0)
cr.save()
cr.set_source_surface(ImageSurface.create_from_png(buffer))
cr.paint()

【讨论】:

    【解决方案2】:

    如果使用 cairocffi 而不是 pycairo(API 兼容),cairocffi.pixbuf 模块提供与 GDK-PixBuf 的集成,用于将各种图像格式加载到 cairo。

    https://cairocffi.readthedocs.io/en/stable/pixbuf.html

    例子:

    from cairocffi import ImageSurface, pixbuf
    
    def get_image(image_data: bytes) -> ImageSurface:
        return pixbuf.decode_to_image_surface(image_data)[0]
    
    def load_image(image_file_path: str) -> ImageSurface:
        with open(str(image_file_path), 'rb') as file:
            return get_image(file.read())
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多