找出文件的类型(GIF,JPG,PNG) - DELPHI

时间:2015-08-09 23:16:57

标签: delphi delphi-xe5 idhttp

我按照网址携带图片并显示TImage。我将使用JPG,GIF和PNG。但我不知道如何找出每个文件的扩展名,然后进行区分。如何获取标题或任何其他方法让我知道什么类型的文件:GIF或PNG或JPG?

          <div class="panel-body">
          <div class="pull-right">
            <h3><a href="#" class="btn btn-primary btn-add-ebook-retailer"  data-toggle="modal" data-target="#add_retailer_link">Add Retailer Link</a></h3>
          </div>
          <table class="table table-striped table-opaque">
            <thead>
            <tr>
              <th>Actions</th>
              <th>Retailer</th>
              <th>Country</th>
              <th>URL</th>
              <th>ASIN</th>
            </tr>
            </thead>
            <tbody>
            <% @title.retailer_links.each do |link|%>
                <% if link.retailer_id == 1 || link.retailer_id == 2 || link.retailer_id == 6  %>
                <tr>
                  <td class="actions"><a href="" class="btn btn-primary btn-xs btn-edit-retailer-link" data-retailer-id="<%=link.id%>"><i class="fa fa-pencil-square-o fa-fw"></i></a> <a href="" class="btn btn-xs btn-danger btn-delete-retailer-link" data-retailer-id="<%=link.id%>"><i class="fa fa-times fa-fw"></i></a></td>
                  <td><%= link.retailer.display_name%></td>
                  <td><%= link.locale%></td>
                  <td><a href="<%= link.product_uri%>" target="_blank"><%= link.product_uri.truncate(153)%></a></td>
                  <td><%= link.asin%></td>
                <%end%>
            <%end%>
            </tr>
            </tbody>
          </table>
        </div>

2 个答案:

答案 0 :(得分:8)

有一些机制旨在允许描述请求(或响应)的内容,但任何外部元数据可能不可靠,完全取决于准确的实现和设置涉及的元数据。在某些情况下,元数据可能不正确或完全丢失。

幸运的是,与许多文件格式相同,您提到的图像文件类型的规范都要求使用特定的标头来将文件(或流)标识为符合(或有志于符合)相关规范。

first 3 bytes of a GIF file是:

`G` `I` `F`    (ASCII)

您可能还希望检查后续的3个字节是否有有效的GIF版本号,也是用ASCII编码的:

`8` `9` `a`   or `8` `7` `a`

first 8 bytes of a PNG file的值为:

137 80 78 71 13 10 26 10   (decimal)

first 2 bytes of a JPEG fil e是:

FF D8   (hex)

因此,要检测响应流中数据的格式,您只需要检查流的前8个字节,以获取其中一个预期的标头值。

答案 1 :(得分:4)

我找到了一种方法来做我想要的,因为有些网址没有显示扩展名。

只需从服务器响应中提取图像类型:

header := IdHTTP1.Response.ContentType;

image/jpeg = JPG

image/gif = GIF

image/png = PNG