代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

一旦我可以将此字符串保存为图像,其他时间我就可以

  •  1
  • Richard Knop  · 技术社区  · 14 年前

    好啊。长话短说。

    我的相机有拍照的方法,它返回的是:

    [160, 120, 3, 10, 1287848024, 96181, 'super long image string']
    

    我可以在调用如下方法后立即解码字符串并将其保存为图像:

    for i in range(0, 10):
      image = camProxy.getImageRemote(nameId)
      imageWidth = image[0]
      imageHeight = image[1]
      imageByteArray = image[6]
      im = Image.fromstring("YCbCr",(imageWidth,imageHeight),imageByteArray)
      fileName = str(time.time())+".jpg"
      im.save(fileName, "JPEG")
    

    这很好地工作,我可以打开保存的图像。

    但是,如果我只是将字符串保存到一个txt文件中,稍后我想加载它并像这样保存为图像:

    f = open("rawImage.txt", "r")
    data = f.readline()
    f.close()
    
    # save as image
    im = Image.frombuffer("YCbCr",(160,120),data)
    im.save("test.jpg", "JPEG")
    

    我得到的几乎是完全绿色的图像。

    下面是一个示例字符串,我一直对它有问题:

    http://richardknop.com/rawImage.txt

    以下是该图像相机的getImageRemote()方法的完整输出:

    http://richardknop.com/log.txt

    有人知道可能出什么问题吗?这是与编码有关的问题吗?所有文件都保存为ASCII格式,但我也尝试将它们全部保存为UTF-8格式。

    编辑:

    如何将图像写入文件?我刚刚重定向了脚本的输出:

    python script.py > output.txt
    

    在剧本里我有:

    print imageByteArray
    
    3 回复  |  直到 14 年前
        1
  •  6
  •   Steven Rumbalski    14 年前

    "r" "rb"

    import time
    import Image
    image_data = [160, 120, 3, 10, 1287848024, 96181, 'really long string from http://richardknop.com/log.txt']
    imageWidth = image_data[0]
    imageHeight = image_data[1]
    imageByteArray = image_data[6]
    fout = open("image_data.txt", "wb")
    fout.write(imageByteArray)
    fout.close()
    fin = open("image_data.txt", 'rb')
    image_string = fin.read()
    fin.close()
    im = Image.fromstring("YCbCr",(imageWidth,imageHeight),image_string)
    fileName = str(time.time())+".jpg"
    im.save(fileName, "JPEG")
    

    read readline

    data = f.readline() data = f.read()

        2
  •  3
  •   mouad    14 年前

    open('file_name', 'wb')
    open('file_name', 'rb')
    
        3
  •  1
  •   Community Marks    7 年前

    import Image
    import ast
    
    with open('rawImage.txt','r') as f:
       raw_data=f.read()
    with open('log.txt','r') as f:
       log_data=f.read()   
    log_data=ast.literal_eval(log_data)
    imageWidth=log_data[0]
    imageHeight=log_data[1]
    log_data=log_data[6]        
    

    raw_data log_data

    print(len(raw_data))
    # 146843
    print(len(log_data))
    # 57600
    

    \x81

    print(list(raw_data[:10]))
    # ['6', '}', '\\', 'x', '8', '1', '8', '}', '\\', 'x']
    print(list(log_data[:10]))
    # ['6', '}', '\x81', '8', '}', '\x81', '7', '\x90', '\x8a', '4']
    

    'w' 'wb' Steven Rumbalski does here

    raw_data_fixed=raw_data.decode('string_escape') 
    

    im = Image.fromstring("YCbCr",(imageWidth,imageHeight),raw_data_fixed)
    im.show()