首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用tinify和python压缩照片并放到另一个目录中。

使用tinify和python压缩照片并放到另一个目录中。
EN

Stack Overflow用户
提问于 2019-04-04 13:13:32
回答 1查看 198关注 0票数 0

我正慢慢开始研究python,并希望编写使用tinify api的简单脚本,从未优化的目录中拍摄照片,将其压缩并放到优化的目录中。到目前为止,我的部分工作,我的意思是,奇怪的是,我需要将照片保存在主目录和未优化的一个。如果我在其中一个目录中没有另一个副本,我就有错误。另一件事是,在我启动脚本之后,只有第一张照片被压缩并放入优化的目录中,然后出现错误。到目前为止,我正在试验两张照片: lew.jpg和kot.jpg,我的目录结构如下所示:

带有脚本的主根目录和内部的另外两个目录(优化和未优化)

代码语言:javascript
复制
def optimalizeImages():
    for fname in os.listdir('./unoptimalized'):
        if fname.endswith(".jpg"):
            print(fname)
            source = tinify.from_file(fname)
            print("processing", fname)
            os.chdir("./optimalized")
            source.to_file("optimalized-" + fname)
            print("changed", fname)

optimalizeImages()

处理第一幅图像后出现的错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "python.py", line 20, in <module>
    optimalizeImages()
  File "python.py", line 11, in optimalizeImages
    source = tinify.from_file(fname)
  File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/__init__.py", line 79, in from_file
    return Source.from_file(path)
  File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/source.py", line 13, in from_file
    with open(path, 'rb') as f:
IOError: [Errno 2] No such file or directory: 'kot.jpg'

如果我只将照片保存在根目录中,没有错误,但也没有任何操作,如果我只将照片保存在未优化的位置,就会得到相同的错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "python.py", line 20, in <module>
    optimalizeImages()
  File "python.py", line 11, in optimalizeImages
    source = tinify.from_file(fname)
  File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/__init__.py", line 79, in from_file
    return Source.from_file(path)
  File "/home/grzymowiczma/.local/lib/python2.7/site-packages/tinify/source.py", line 13, in from_file
    with open(path, 'rb') as f:
IOError: [Errno 2] No such file or directory: 'lew.jpg'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 13:24:09

这里有两个问题,都是因为您使用的是相对文件名。os.listdir()给出了那些相对的文件名,没有路径。而不是./unoptimalized/kot.jpg,你只得到了kot.jpg

因此,当您尝试加载图像时:

代码语言:javascript
复制
source = tinify.from_file(fname)

您告诉库加载image.jpg时,除了当前工作目录之外,没有任何上下文。这不是正确的目录,如果os.listdir('./unoptimalized')试图列出所有图像文件,则不是这样;这表明当前工作目录位于unoptimalizedoptimalized的父目录中。

您可以通过在父目录中放置一个同名的图像文件来解决这个问题,但是这并不是解决这个问题的正确方法。下面会有更多的介绍。

下一个问题是更改工作目录:

代码语言:javascript
复制
os.chdir("./optimalized")

您可以对第一个映像执行此操作,因此现在当前的工作目录已更改为optimalized。然后,当您循环返回下一个文件时,您现在完全处于错误的位置,无法读取下一个文件。现在,可能存在于lew.jpg或父目录中的./unoptimalized无法找到,因为它不在./optimalized中。

解决方案是添加目录名。您可以使用os.path.join()完成此操作,而不需要更改目录:

代码语言:javascript
复制
def optimalizeImages():
    input_dir = './unoptimalized'
    output_dir = './optimalized'
    for fname in os.listdir(input_dir):
        if fname.endswith(".jpg"):
            print(fname)
            source = tinify.from_file(os.path.join(input_dir, fname))
            print("processing", fname)
            source.to_file(os.path.join(output_dir, "optimalized-" + fname))
            print("changed", fname)

请注意,这在很大程度上取决于当前工作目录是否正确,但至少现在它是稳定的,并且保持在optimalizedunoptimalized的父目录中。您可能希望将其更改为使用绝对路径。

还有一个关于语言的附加说明:在英语中,这两个词的正确拼写是优化的和未优化的。我没有纠正我的答案中的那些,把注意力集中在出了什么问题上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55516905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档