我按照网址携带图片并显示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>
答案 0 :(得分:8)
有一些机制旨在允许描述请求(或响应)的内容,但任何外部元数据可能不可靠,完全取决于准确的实现和设置涉及的元数据。在某些情况下,元数据可能不正确或完全丢失。
幸运的是,与许多文件格式相同,您提到的图像文件类型的规范都要求使用特定的标头来将文件(或流)标识为符合(或有志于符合)相关规范。
`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