Python - 无法导入模块'PIL'

时间:2018-04-07 04:54:16

标签: javascript python browser image-compression transcrypt

我编写了代码来压缩.py文件中的图像,并尝试使用transcrypt进行编译以转换为JS文件。在这个过程中我得到了以下错误(屏幕截图)但是如果我使用IDE单独运行.py文件,它工作正常&压缩图像。

代码:

import PIL   
from PIL import Image as pil

class FileUpload:

    def Images (self,arg):
    # Open the image
            im = pil.open(arg)
    # Now save it
            im.save("img_compressed.jpg", format="JPEG", quality=90)

fileupload = FileUpload()

错误:

\python src\imgcompress>python -m transcrypt -b -m -n imageCompress.py

Transcrypt (TM) Python to JavaScript Small Sane Subset Transpiler Version 3.6.101
Copyright (C) Geatec Engineering. License: Apache 2.0


Error while compiling (offending file last):
        File '/python src/imgcompress/imageCompress.py', line 1, at import of:
        File '/python/lib/site-packages/PIL/__init__.py', line 14, namely:

        Can't import module 'PIL'

Aborted

screen shot

2 个答案:

答案 0 :(得分:2)

以下JS库适用于在上传之前压缩图像:

https://github.com/brunobar79/J-I-C

任何JS库都可以直接在Transcrypt中使用,因此有很多选择。重点是:寻找JS而不是Python lib。只是Google for

  

javascript图像压缩浏览器

有意将Transcrypt置于JS生态系统中。

http://www.transcrypt.org/docs/html/what_why.html#the-ecosystem-different-batteries

要在不使用库的情况下进行压缩,请参阅例如

How to compress an image via Javascript in the browser?

请注意,您可以使用以下代码嵌入任何未经修改的JS代码:

http://www.transcrypt.org/docs/html/special_facilities.html#inserting-literal-javascript-pragma-js-and-include

但这很少是必要的,您可以直接从Transcrypt使用上面的技巧,只需转换为Python语法。所有DOM功能都可用。

答案 1 :(得分:1)

Transcrypt不能使用C扩展库,只能使用纯Python库。这就是为什么他们将Numpy API的一部分重新实现为Numscrypt而不仅仅是使用Numpy。

有一些纯Python库与Pillow具有相似的功能,如pymaging,但我不知道它们中是否有任何你需要的功能,速度或稳健性;你必须自己试试。

如果您没有在浏览器中运行它,它也可以使用Node.js包,还有用于处理图像文件的Node包。我怀疑它们中的任何一个都是Pillow的完全替代品,但是如果你只想要基本的功能,那么编写一个try / except来导入任何可用的和定义的应该很容易几个包装纸。

如果 在浏览器中运行......那么,您就无法访问文件系统,这会排除很多PIL功能......但另一方面,你已经从DOM中获得了原生图像对象。