我将图像从其他脚本导入到我的脚本中
两个图像名称都保存在数据库中。
我的剧本
Post_ID - old_pic_name - new_pic_name - is_gif
1 - long_file_name.jpg - 1.jpg - 0
2 - long_file_name2.png - 2.png - 0
3 - long_file_name3.gif - 3.gif - 1
我有专门的服务器。 我尝试使用php从数据库中导入文件名中的旧名称然后调整大小并重命名。它很成功,但有一个小问题。
原始网站包含超过116000张图片。 PHP转换需要大约15分钟来转换500张照片,有时会以错误结束,我不得不手动重新启动刷新。
我不知道我是否可以为脚本提供所有服务器资源以更快地完成加载,或者还有别的东西。
我想用SHELL做。可能会更快,它将覆盖php max_execution_time和memory_limit限制。
原始照片位于/ old_data /文件夹中。 新文件夹应该是这样的: / o /包含以new_post_id.image_extension为名称的文件的原始副本 / t /包含3个已调整大小的(728px宽度)名称l-new_post_id.image_extension和(500px宽度)new_post_id.image_extension和s-new_post_id.image_extension(300px宽度)。
例如:
第一行:
ID = 1
老照片目录:/old_data/long_file_name.jpg
新照片目录:/o/1.jpg(原文的精确副本,刚重命名)
新调整大小的照片:/t/1.jpg(500px max-width)& /t/l-1.jpg(728px max-width)& /t/s-1.jpg(300px max-width)
我在想是否可以将这些信息导出为合适的文件格式,可以使用linux中的bash shell导入,并使用数据进行重命名并使用GD和ImageMagick递归调整大小。但老实说,我不知道该怎么做。
我希望有人可以提供帮助。
最诚挚的问候。
答案 0 :(得分:0)
好的,我已经尝试过编辑你的东西,但我仍然无法理解。
我对编程的了解是:你必须能够以最简单的方式拼写你正在做的事情。 然后你就可以开始编码了。
所以,我说,小心思开始吧。 把你的工作分成几部分。 思考迭代和增量。
此外,如果您需要来自stackoverflow的帮助,请考虑格式化您的问题,以便人们可以真正理解它。
这可能是一个评论,但实际上,它是一个答案。
答案 1 :(得分:0)
问题不是那么清楚,但无论如何我会尝试给出一个可能有帮助的答案。
正如我从您的问题中所理解的,您有一个PHP脚本,它从服务器中提取了超过100,000个图像,并将它们放在名为old_data/
的目录中。然后,您需要一个shell / bash脚本,该脚本将获取此目录中文件中列出的所有图像并调整其大小。结果将存储在三个不同的目录中。
我假设您创建了PHP脚本中列出图像的文件,因此可以自己选择此文件的格式;我建议每行存储一个图像。我会这样存储:
1;long_file_name.jpg
2;some_other_file.png
...
您还可以存储由制表工具或空格或类似物分隔的地方。我不会将目标目录存储在此行中,因为它们对于每个图像都是相同的。
现在你需要的是一个shell脚本,它迭代这个文件的行并调整所有图像的大小,将它们放在三个目标目录中。我会使用convert
来调整图像大小。 convert
可以像这样使用:
convert old_data/long_file_name.jpg -resize 300 /t/s-1.jpg
现在我们要做的就是将这个命令嵌入到脚本中。
while read line || [[ -n "$line" ]]; do
num= echo $line | cut -d ';' -f 1
file= echo $line | cut -d ';' -f 2
fe= ${file##*.}
mv old_data/${file} o/${num}.${fe}
convert old_data/${file} -resize 500 /t/${num}.${fe}
convert old_data/${file} -resize 728 /t/l-${num}.${fe}
convert old_data/${file} -resize 300 /t/s-${num}.${fe}
done < $1
要运行此脚本,请使用:
./script image_list
请注意,|| [[ -n "$line" ]]
只是为了确保脚本读取文件的最后一行(如果后面没有换行符);如果您的PHP-sript在文件末尾添加换行符,则可以删除此部分
您也可以尝试将图像转换为728像素,然后将其转换为500像素,最后通过读取较小的文件将500px转换为300px以获得可能的加速,但我不确定这一点,您必须尝试它
我实际上不确定你是否必须逃避${file##*.}
中的点,就像在我的bash中那样:${file##*.}
和${file##*\.}
。
为了加快转换速度,看看here,可能会有一些关于并行化整个事情的有用信息。