将原始图像数据转换为物理文件

时间:2012-12-19 20:56:03

标签: php image image-processing rets

我正在调用基于RETS的服务来收集有关房产列表的数据......当然,关于这一点的主要方面之一是获取照片。但是,照片的数据实际上是原始图像数据:

ÿØÿàJFIF``ÿá"ExifII*îhÿÛC       $.' ",#(7),01444'9=82<.342ÿÛC     2!!22222222222222222222222222222222222222222222222222ÿÀU"ÿÄ    ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚  %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ    ÿĵw!1AQaq"2B‘¡±Á  #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ 
等等等......

如何转换/使用此原始数据并将其转换为Web服务器上的物理文件?

3 个答案:

答案 0 :(得分:2)

尝试将此原始数据写入文件。如果您确定文件格式始终为JPG,则将.jpg设置为扩展名。

如果没有,您可能希望查看here - 这可以帮助您获取正确的文件格式,然后设置适当的文件扩展名。

编辑我不知道RETS协议,但它可能会返回您图像的内容类型,这应该会更加简化整个过程。 :)

答案 1 :(得分:0)

此外,如果在对给定列表的所有照片使用GetObject请求时在流中获得多个jpeg,则可以拆分ÿØÿà字节(\ xff \ xd8 \ xff \ xe0)并保存每个字节流由于作为jpeg文件拆分而产生,但你必须在每个jpeg的开头保留ÿØÿà,因此在完成拆分后你需要在每个块的开头重新插入它们。我也从“RETS-like”服务中遇到过这种情况,并且必须手动将下标(_1,_2等)添加到分割产生的jpeg文件名中。它最终变成了:

if response.find('\xff\xd8\xff\xe0') > -1:
    blist = response.split('\xff\xd8\xff\xe0')
    blist.remove("")  /* get rid of any empty list elements resulting from split */
    index = 1
    for img in blist:
        file_nm = os.path.join(photo_dir, "{0}_{1}.jpg".format(photo_id, index))
        with open(photo_file_nm, "wb") as photo_file:
            photo_file.write('\xff\xd8\xff\xe0' + img)
        index += 1

...其中photo_dir和photo_id在此块之外定义。这个例子是python,但可以很容易地翻译成php。

答案 2 :(得分:0)

您必须从RETS服务器解析mime multipart对象。您可以手动获取每一行并在mime seperator字符串中对其进行分块,您还必须确定它在标题中的位置。

如果您想节省时间,请查看phrets class源代码(或只使用它)。 https://github.com/troydavisson/PHRETS/blob/master/phrets.php#L141

以下是一些例子, https://github.com/troydavisson/PHRETS/wiki/GetObject