【问题标题】:Display a part of image using binary data使用二进制数据显示图像的一部分
【发布时间】:2014-01-24 20:28:02
【问题描述】:

我想知道是否可以使用file_get_contents 显示部分图像。

目前我正在使用此代码显示图像而不显示其链接/位置

<img src="data:image/gif;base64,<?php echo base64_encode(file_get_contents($image)); ?> ">

有没有办法使用file_get_contents 只显示图像的 1/3 或 1/2?

【问题讨论】:

    标签: php image-processing data-uri


    【解决方案1】:

    为此,您需要对图像进行解码、裁剪和重新编码。在 PHP 中,您可以使用 GD library 来执行此操作,例如:

    # load source image and get its size
    $img = imagecreatefromgif( $image_file_name );
    $width = imagesx( $img );
    $height = imagesy( $img );
    
    # create a copy showing only the top half of the image
    $cropped = imagecreate( $width, $height / 2 );
    imagecopy( $cropped, $img, 0,0, 0,0, $width, $height/2 );
    
    # output image in GIF format emdebbed on the page
    # XXX: GD doesn't seem to support output to string directly, but we can hack it
    ob_start(); imagegif( $cropped ); $gif = ob_get_clean();
    echo '<img src="data:image/gif;base64,', base64_encode( $gif ), '">';
    
    # free the image objects once they're no longer needed
    imagedestroy( $img );
    imagedestroy( $cropped );
    

    【讨论】:

    • @Susan:你为什么要编辑它? echo 可以 output multiple strings separated by commas 就好了,it's even slightly more efficient 比先将参数连接成一个字符串。 (不过,感谢您的支持!)
    • 我的错..如果我没记错的话,我认为在我的测试中它出错了,但只是再次测试并且(如预期的那样)它可以正常工作。当时一定是找错树了。
    【解决方案2】:

    浏览器不会解码部分图像。您可以使用各种 CSS 技术来隐藏图像的剩余区域,例如将图像包裹在 DIV 中,使用overflow:hidden 设置 CSS 宽度 + 高度,或者将其设置为 CSS 背景并设置该元素的尺寸。

    或者,您可以在canvas 中渲染它。

    【讨论】:

    • 我想隐藏图像的内容,这样 css 技术就不起作用了。我想我可以使用某种 php 库以二进制形式裁剪图像,或者制作另一个裁剪的图像文件。
    • 任何人都可以在客户端嗅探数据 uri 并抓取图像,无论您使用什么客户端技术。真正隐藏事物的唯一方法是不将它们交付给客户。
    • 对不起,我说得不够清楚。该图像将显示给注册会员。我要存档的是向非注册会员显示图像的一部分。我不介意他们是否抓取图像,我只是不希望他们能够跟踪图像文件夹的位置。
    • 数据 uri 非常适合。或者您可以通过一个程序代理图像 它将为图像发送一个 MIME 标头,然后流式传输数据,从而屏蔽源。
    猜你喜欢
    • 2014-08-09
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多