【问题标题】:How to use image from internet in PyGame without saving it on disk?如何在 PyGame 中使用来自互联网的图像而不将其保存在磁盘上?
【发布时间】:2015-02-06 21:19:43
【问题描述】:

我试过了:

import pygame
import urllib.request

page = urllib.request.urlopen("http://s.gjcdn.net/img/logo-small-3.png")
image = page.read()

pygame_image = pygame.image.frombuffer(image, (196, 25), "RGB") #(196, 25) are checked on image original

但是当我运行它时,我得到ValueError: Buffer length does not equal format and resolution size

有什么方法可以做到这一点(将文件保存到磁盘),或者我的代码有问题吗?

我也想知道怎么知道图片的大小(因为我大多不知道图片的大小)?

【问题讨论】:

  • 从技术上讲,您每次运行此代码时都在下载图像。仅仅因为您没有将其保存到磁盘并不会神奇地使其成为“不可下载”。
  • @Marc B 我的意思是不保存到磁盘。
  • 尝试使用image = cStringIO.StringIO(page.read())
  • @martineau 我使用 Python 3,但我的库中没有 cStringIO,它是第 3 部分库吗(如果它在哪里可以下载?),如果它仅在 Python 2 中我可以用什么代替cStringIO
  • 哦,抱歉,您的问题没有被标记为 Python 3。不,cStringIO 不是第三方库,请参阅此answer

标签: image python-3.x pygame urllib


【解决方案1】:

image.frombuffer 用于将已加载到内存中的数据作为图像缓冲区创建图像。你想要的是image.load,它获取一个图像文件并将其转换为一个图像缓冲区。您应该能够将它传递给您的page,因为这已经是一个类似文件的对象。

【讨论】:

  • 我在使用 pygame.image.load() 时收到错误 pygame.error: Can't seek in this data source
【解决方案2】:

试试 RGBA 格式?毕竟,图像确实包含 alpha 值。 如果这没有帮助,那么就有这个问题。它正在处理套接字,但它可能是相关的。 Pygame not working with sockets

【讨论】:

  • 我尝试了 RGBA 格式,但还是同样的错误,而且那个问题/答案也不是很有帮助。
  • 我刚刚做了一个快速搜索,似乎你不能将 frombuffer 与压缩的 png 图像一起使用。该函数需要原始像素数据。 link
猜你喜欢
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 2011-10-31
相关资源
最近更新 更多