如何在PHP中用不同的名称保存相同的图像?
我已经编写了一个函数,用于从.jpg图像创建缩略图。但我想做的是,每当调用该函数时,相同的图像应保存为1.jpg、2.jpg、3.jpg,保存在相同的目标位置 我使用了会话和静态变量概念,但没有成功 这是我的密码。 这是thumbsave.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
<?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和路径名,然后链接到用户或文章等。最终,你可以用很多方法来解决这个问题:)