Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中用不同的名称保存相同的图像?_Php_Thumbnails - Fatal编程技术网

如何在PHP中用不同的名称保存相同的图像?

如何在PHP中用不同的名称保存相同的图像?,php,thumbnails,Php,Thumbnails,我已经编写了一个函数,用于从.jpg图像创建缩略图。但我想做的是,每当调用该函数时,相同的图像应保存为1.jpg、2.jpg、3.jpg,保存在相同的目标位置 我使用了会话和静态变量概念,但没有成功 这是我的密码。 这是thumbsave.php文件 <?php session_start(); $_SESSION['sid']=$k=1; function createThumb($fpath)//fpath will be passed here as parameter. { $im

我已经编写了一个函数,用于从.jpg图像创建缩略图。但我想做的是,每当调用该函数时,相同的图像应保存为1.jpg、2.jpg、3.jpg,保存在相同的目标位置

我使用了会话和静态变量概念,但没有成功

这是我的密码。 这是thumbsave.php文件

<?php
session_start();
$_SESSION['sid']=$k=1;
function createThumb($fpath)//fpath will be passed here as parameter.
{
$ims = imagecreatefromjpeg($fpath);
$imd = imagecreatetruecolor(100, 100);

imagecopyresized($imd, $ims, 0, 0, 0, 0, 100, 100, imagesx($ims), 
imagesy($ims));
imagejpeg($imd,"saveimages/" . $_SESSION['sid'] . ".jpg");
$_SESSION['sid'] = $_SESSION['sid'] + 1;
imagedestroy($ims);
imagedestroy($imd);

echo "Thumbnail Created and Saved at the Destination";

}

?>

这是我的dynamicthumb.php代码

<?php
include("include/thumbsave.php");
createThumb("imgs/m1.jpeg");
 ?>


因此,当我运行dynamicthumb.php文件时,存储在imgs文件夹中的图像必须存储在saveimages文件夹中。但是这里只保存一个图像,而不是像2.jpg、3.jpg那样生成多个副本。

这是负责将图像保存到文件的行:

imagejpeg($imd,"saveimages/" . $_SESSION['sid'] . ".jpg");
您可以将其更新为使用
$fpath
而不是
$\u会话['sid']

imagejpeg($imd, $fpath);

但请注意,您的路径应以结尾。jpg

如果您确定缩略图的名称为数字,则可以使用文件\u exists循环:

function createThumb($fpath)
{
    $ims = imagecreatefromjpeg($fpath);
    $imd = imagecreatetruecolor(100, 100);

    imagecopyresized($imd, $ims, 0, 0, 0, 0, 100, 100, imagesx($ims), imagesy($ims));

    $thumb = 1;
    while ( file_exists('saveimages/'. $thumb .'.jpg') ) { $thumb++; }

    imagejpeg($imd,'saveimages/'. $thumb .'.jpg');
    imagedestroy($ims);
    imagedestroy($imd);

    echo 'Thumbnail Created and Saved at the Destination as '. $thumb .'.jpg';
}
然而,我质疑你所要求的背后的逻辑。。。这表明您创建的每个缩略图都只是一个序列号,都存储在同一个目录中

使用
计数器
db字段或文件可能会更幸运,因为在一个有数千个且不断增长的文件夹中使用
file\u会影响性能

因此,基于文件的
计数器
解决方案可以是:

function createThumb($fpath)
{
    $ims = imagecreatefromjpeg($fpath);
    $imd = imagecreatetruecolor(100, 100);

    imagecopyresized($imd, $ims, 0, 0, 0, 0, 100, 100, imagesx($ims), imagesy($ims));

    $thumb  = file_get_contents('saveimages/thumbcount.txt');
    $thumb++; file_put_contents('saveimages/thumbcount.txt',$thumb);

    imagejpeg($imd,'saveimages/'. $thumb .'.jpg');
    imagedestroy($ims);
    imagedestroy($imd);

    echo 'Thumbnail Created and Saved at the Destination as '. $thumb .'.jpg';
}

只需确保用
1
thumbcount.txt
加上前缀,这样它就有了开头。

问题是,假设我想创建社交媒体网站。因此,每当用户上传任何图片时,都必须将其保存在目录中。所以假设用户上传了总共5张图片。因此,将存储在目录中的缩略图将是1.jpg,2.jpg,…,5.jpg。这只是为了通过给图像起数字名来保持图像的唯一性。对。你也可以更进一步,在图像名称上加上一个用户id,这样它们就关联起来了。通常,当我制作图像时,我有一个与它们相关的db条目,所有条目都具有唯一的id和路径名,然后链接到用户或文章等。最终,你可以用很多方法来解决这个问题:)