不显示文件路径的情况下显示图片

4
有没有办法在不使用HTML标签的情况下显示图片,我想使用PHP来显示图片。因为如果使用HTML,有人可以保存或分享该图片。编辑:很抱歉我的问题不够清晰。我不是指防止保存图片。我是指不在URI或HTML上显示文件路径"/path/to/image.jpg"。因为我不希望用户复制和分享包含在我的网站上的图片链接。分享该图片的唯一方法是“另存为”并分享它。无论如何,感谢大家。这是我的解决方案:
<?php
$image = 'new.png'; 
$content = file_get_contents($image); 
header('Content-Type: image/jpeg');
echo $content; exit();
7个回答

3

这是我的解决方案:

<?php
$image = 'new.png'; 
$content = file_get_contents($image); 
header('Content-Type: image/jpeg');
echo $content; exit();

这种方式之前运行得很好吗?我也需要这个东西! - user2088078

3
即使您使用PHP输出图像,也需要使用HTML。无法防止用户保存图片。 您可以尝试使用CSS将图像作为背景图片,这将防止非高级用户保存该图像,但是任何知道如何检查DOM或读取CSS的人都不会有任何问题。请注意 - 当用户在页面上看到图像时,他们的浏览器已经将文件下载到用户的硬盘驱动器中。

1
<?php $image = 'image/test.jpg'; $content = file_get_contents($image); header('Content-Type: image/jpeg'); echo $content; 我可以显示图片,但无法显示其路径。 - emeraldhieu
是的,但用户仍然可以从他们访问它的PHP文件中下载它。 - dtbarne
我使用/controller/action并检查成员。他们无法共享链接。他们只能“另存为图像”并分享图像。 - emeraldhieu

3
如果浏览器可以查看图片,用户就可以保存它。这是无法避免的规则。
唯一的例外是使用1x1像素的div重新创建图像,每个像素的颜色都需要对应相应的div,但这种方法非常笨重,只有在处理小尺寸图片时才能使用。

2

<img>标签中,可以通过base64格式的图片作为src属性的值。

示例:

<img src="data:image/png;base64,--your 64--" alt="Red dot" />

1

正如dtbarne所解释的,任何高级用户都可以获取图像。但是人们会采取几种措施来防止普通用户这样做。

  1. 禁用右键
  2. 在没有工具栏的弹出窗口中显示
  3. 使用CSS设置图像以隐藏路径,就像我们在<img src = "">中使用的那样
  4. 使用JavaScript加载图像
  5. 使用PHP生成动态图像。在生成图像之前,需要检查身份验证和时间戳。

可能还有其他方法。仅供参考。


1

页面上的任何内容都需要 HTML 来呈现。这也意味着它在代码中某个地方是可见的 - 有些直接可见,有些需要使用调试工具来拦截。

以下是防止他人窃取图片的方法(并非全部理想但能达到目的):

  1. 使用 Flash/Silverlight 作为框架 - 虽然不理想,但可以帮助您防止那些右键另存为的人。您也无法查看 Flash 源代码。

  2. 使用背景图片 - 将 div 设置为足够大以适应其中的图片(因为 div 依赖于显式维度或子元素的维度来拉伸)。URL 在 CSS 上是可见的(除非是动态放置)。

  3. 使用带有“盾牌”的图像 - 为此,请创建一个容器 div 并将图像放入其中。在同一容器中,有一个覆盖图像的 div(绝对定位,z-高 z-index)。这可以防止“右键保存”方法。但图像路径在源代码中是可见的(除非也是动态放置的)。

您可能会想到 canvas,但 canvas 就像位图(因此仍然是图片),因此也不可行。

所有这些方法都不是百分之百可靠的。避免别人盗用你的图片的唯一方法就是使用水印。他们可能会保存,但无法拥有它,因为它上面会带有水印(比如你的名字)。


1

如果客户端可以看到您的图像,用户无论如何都可以保存它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接