使用PHP将图像的一部分发送到客户端

时间:2015-05-31 02:35:21

标签: php image-processing

您好我的PHP服务器上有一个巨大的图像,它代表了网络游戏中的地图。 我只需要客户端请求获取该图像的一小部分。客户端请求无法加载整个图像,因为: 1)它会使服务器窒息 2)我不希望客户知道整个地图的样子。

imagecopy 功能是否满足我的需求?在那种情况下,我不知道如何使用它...我有这个片段:

<?php        
    // Create image instances
    $src = imagecreatefromgif('images\map.gif');
    $dest = imagecreatetruecolor($mapVisibleWidth, $mapVisibleHeight); 

    // Copy
    imagecopy($dest, $src, 0, 0, x, y, mapVisibleWidth, mapVisibleWidth);                

    // Output and free from memory
    header('Content-Type: image/gif');
    imagegif($dest);

    imagedestroy($dest);
    imagedestroy($src);

    ?> 

谢谢!

1 个答案:

答案 0 :(得分:1)

我没有任何大型地图图片或你拥有的东西..

但是对于一个例子我只是在谷歌搜索并得到了一个符合你需要的随机图像。

第1步:

使用imagecreatefrompng.png文件

生成图片
$srcp = imagecreatefrompng("http://www.clker.com/cliparts/O/f/g/g/S/T/curly-frame-hi.png");

您可以指向任何包含png图像的网址

第2步:

设置要创建的图像的大小

$destp = imagecreate(150, 150);

第3步:

使用自定义设置制作副本

imagecopyresampled($ destp,$ srcp,0,0,8,8,150,150,8,8);

第4步:

设置标题类型并生成

header('Content-type: image/png');
imagepng($destp);

所以你的代码将是

<?php
    $srcp = imagecreatefrompng("http://www.clker.com/cliparts/O/f/g/g/S/T/curly-frame-hi.png");
    $destp = imagecreate(150, 150);
    imagecopyresampled ($destp, $srcp, 0, 0, 8, 8, 150, 150, 8, 8);
    header('Content-type: image/png');
    imagepng($destp);
?>

注意:

  1. 您可以按照相同的方式对其他格式,尺寸和图像进行少量修改。

  2. 通过这种方式,用户甚至无法通过图像路径或右键单击打开完整图像,并且可以保证其安全。

  3. 更新:

    由于OP需要显示标题,标题等,

    由于函数本身默认创建头文件和html元素,因此您无需担心它。

    但是如果你想这样做,你可以使用类似iframe的东西,其中php页面本身可以加载到你想要的任何页面中。

    这是他的简短例子。

    将以下文件保留为source.php

    <?php
        $srcp = imagecreatefrompng("http://www.clker.com/cliparts/O/f/g/g/S/T/curly-frame-hi.png");
        $destp = imagecreate(150, 150);
        imagecopyresampled ($destp, $srcp, 0, 0, 8, 8, 150, 150, 8, 8);
        header('Content-type: image/png');
        imagepng($destp);
    ?>
    

    并将页面设为display.html

    你可以像这样iframe

    <!DOCTYPE html>
    <html>
    <head>
        <title>Image Display Viewer</title>
    </head>
     <style type="text/css" media="screen">
            body,
            html {
                width: 100%;
                height: 100%;
                overflow: hidden;
            }
    
            * {
                padding: 0;
                margin: 0;
            }
    
            iframe {
                width: 960px;
                height: 100%;
                overflow: hidden;
                border: none;
            }
        </style>
    <body>
    <iframe src="source.php" scrolling="0"></iframe>
    </body>
    </html>
    

    注意:虽然iframe不是一个好主意,但用户仍然无法看到图片的任何其他部分。这意味着你仍然安全:)