从很多小的创建大图像

时间:2016-01-20 10:36:47

标签: php image laravel image-processing

我有一个网站,其中前端存在很多不同的图像。每个~200 x~50kb。现在所有这些图像都是在不同的请求下载的。 (~200个请求)我的目标是创建一个大图像并仅使用一个请求下载它,我也想在我的MySQL数据库中存储关于图像位置的坐标,因为它将在画布前端使用。此外,我想在插入大图像之前重新调整图像大小,因为50kb是大的。在新图像上传到特定目录后,它也将执行自动操作。 所有图像都在一个目录中。我在后端使用laravel PHP框架。

1 个答案:

答案 0 :(得分:1)

作为起点,您可以使用此代码扫描目录并将找到的每个图像添加到新图像中。这很粗糙,需要调整,但或多或​​少都是你想要的。

<?php
    $dir=realpath( 'c:/wwwroot/images/tmp/' );/* change to suit your environment */
    $col=glob( $dir . '*.*' );/* get all files ( presuming images ) */

    $length=count( $col );/* you could use this to generate new image dimensions dynamically */
    $sizes=array();

    foreach( $col as $file ){
        list( $width, $height, $type, $attr ) = getimagesize( $file );
        $sizes[ realpath( $file ) ]=array( 'w'=>$width, 'h'=>$height, 't'=>$type );
    }

    /* create the new image */
    $img=imagecreatetruecolor(600,600);
    imagecolorallocate( $img, 0,0,0 );
    $x = $y = 0;

    /* add each image to new image */
    foreach( $sizes as $imgpath => $data ){

        $x+=$data['w'];
        $y+=$data['h'];

        $tgt=imagecreatefromjpeg( $imgpath );
        imagecopymerge( $img, $tgt, $x, $y, 0, 0, $data['w'], $data['h'], 100 );
        imagedestroy( $tgt );
    }

    header('Content-Type: image/jpeg');
    imagejpeg( $img );
    imagedestroy($img);
?>