PHP 动态图像创建不起作用

标签 php regex gd

使用以下脚本,我将文本拆分为句子,并从每个句子动态创建图像。我的 for 循环没有正确执行。我不懂为什么?尽管文本包含 4 个不同的句子,但图像创建函数仅被调用一次,仅创建一张图像。该脚本的目的是创建四个图像并将它们保存到硬盘驱动器中。我需要你的建议。

<?php
    $text = "Hello PHP! some sentences. very difficult, yes? that's for sure!?!";

    $chunks = preg_split('#[\r\n]#', $text, -1, PREG_SPLIT_NO_EMPTY);

    foreach($chunks as $val)
    {
        preg_match_all('#(?:\s[a-z]\.(?:[a-z]\.)?|.)+?[.?!]+#i', $val, $paragraph);
            foreach($paragraph[0] as $val)
            {
                $sentences[] = ltrim($val);
            }
    }

    $sentencesCount = count($sentences);

        for ($i=0; $i <$sentencesCount ; $i++) 
        { 
                //$value = $sentences[$i];
                //echo $value . "<br />";

            $image = imagecreatetruecolor(200, 50);
            imagefilledrectangle($image, 0, 0, 199, 49, 0xFFFFFF); //white


            $fontfile = 'verdana.ttf';

            imagefttext($image, 20, 0, 20, 35, 0x000000, $fontfile, $sentences[$i]);

            header('Content-type: image/png');
            imagepng($image);   
            //Save the image after the current timestamp.
            imagepng($image, "savedimages/" . time() . ".png");
            //Clean up.
            imagedestroy($image); 

    }

?>

最佳答案

所有图像都获得相同的文件名,因为代码运行速度足够快,使得 time()函数(返回以秒为单位的时间)给你相同的值 4 次。因此,您将在这一行中覆盖同一个文件 4 次:

imagepng($image, "savedimages/" . time() . ".png");

作为解决方法,您可以使用 rand() 附加随机数以确保唯一性。功能。

imagepng($image, "savedimages/" . time() . "-" . rand() . ".png");

更好的是,使用 php 的内置 tempnam()函数生成唯一的文件名。

关于PHP 动态图像创建不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30308968/

相关文章:

php - CodeIgniter - 分页与删除冲突

php - 将过滤后的实体列表分配给 Symfony2 表单中的实体字段

php - Magento PDF 格式的送货单

javascript - 正则表达式处理标点符号和文本改进

python - 在经常调用的函数中编译正则表达式

php - 调用未定义函数 imagecreatefromjpeg() 并启用 GD

javascript - 手动重定向移动桌面版本

regex - 突出显示 Rust 语法中匹配的尖括号

使用GD和MySQL数据的PHP折线图

php - 文本的自动字体大小(GD 通过 PHP)