2012-07-26 114 views
0

我抓住我的pygame的程序的屏幕這樣pygame的圖像爲base64

  data = pygame.image.tostring(pygame.display.get_surface(),"RGB") 

我如何轉換成字符串的base64? (而不必將其保存到HDD)。重要的是沒有硬盤保存。我知道我可以將它保存到一個文件,然後只對文件進行編碼爲Base64,但我似乎無法編碼「對飛」

感謝

回答

5

如果你願意,你可以將它保存到StringIO,這基本上是一個存儲爲字符串的虛擬文件。

但是,我真的推薦使用base64模塊,它有一個名爲base64.b64encode的方法。它很好地處理了您的「即時」需求。

代碼示例:

import base64 
data = pygame.image.tostring(pygame.display.get_surface(),"RGB") 
base64data = base64.b64encode(data) 

編碼愉快!

+0

是的 - 這就是我最初的想法。但它不起作用。與從文件創建它(通過調用pygame.image.save())並保存到圖片文件相比,我得到不同的base64字符串。我得到很長的重複字符串,你提到的方式 – kosta5 2012-07-26 18:49:04

+0

看起來像:(重複3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // // F3 F3 // // F3 F3 // // F3 F3 // // F3 F3 // // F3 F3 // // d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3djo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Of3 F3 // // F3 F3 // // F3 F3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // f3 // – kosta5 2012-07-26 18:49:43

+0

這可能是因爲它是原始位圖數據,如果知道分辨率,GIMP可以處理它 – Kupiakos 2013-06-06 05:02:57

0

實際上 - pygame.image.tostring()是一個很奇怪的函數(真的不理解它返回的二進制字符串,我找不到任何可以處理它的東西)。

似乎是在pygame的到位桶這一增強的問題: (https://bitbucket.org/pygame/pygame/issue/48/add-optional-format-argument-to

我周圍有這樣的:

  data = cStringIO.StringIO() 
      pygame.image.save(pygame.display.get_surface(), data) 
      data = base64.b64encode(data.getvalue()) 
到底

所以,你得到有效的和右的base64串。它似乎工作。不確定格式尚未,將添加更多信息tmrw

+0

ok,我發現這個: – kosta5 2012-07-27 12:10:22

+0

好吧,我發現這個: 1.首先pygame.image.tostring()提供存儲到二進制文件y字符串RGB格式(你可以在base64中編碼,並用於其他操作) 2.使用建議的StringIO方法與pygame.image.save()將產生期望的base64字符串,但它不再是RGB - 它是JPG(默認)編碼。你可以在未來的pygame版本中更改格式(請參閱此答案中的鏈接) ===>我結束了使用pygame.image.tostring - > base64編碼 - >通過TCP傳輸 - > base64解碼 - >直接加載紋理從字節 – kosta5 2012-07-27 12:16:45