0

URL から pgmagick (ImageMagick の Python Wrapper) を使用してファイルを開くにはどうすればよいのでしょうか?

これまで私は試してきました

i) BytesIO を使用する:

from pgmagick import Image
from io import BytesIO

filepath = 'http://example.com/a.jpeg'
response = requests.get(filepath)
im = Image(BytesIO(response.content))

エラー出力を生成した

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    im = magick_image(BytesIO(response.content))
Boost.Python.ArgumentError: Python argument types in
    Image.__init__(Image, _io.BytesIO)
did not match C++ signature:
    __init__(struct _object * __ptr64, class Magick::Image)
    __init__(class boost::python::api::object, unsigned int, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, enum MagickLib::StorageType, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, unsigned int, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, enum MagickLib::StorageType, char const * __ptr64)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, unsigned int)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry)
    __init__(struct _object * __ptr64, class Magick::Blob)
    __init__(struct _object * __ptr64, class Magick::Geometry, class Magick::Color)
    __init__(struct _object * __ptr64, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64)

Process finished with exit code 1

ii) BytesIO と Blob を使用する:

from pgmagick import Image, Blob
from io import BytesIO

filepath = 'http://example.com/a.jpeg'
response = requests.get(filepath)
im = Image(Blob(BytesIO(response.content)))

エラー出力を生成した

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    im = magick_image(Blob(BytesIO(response.content)))
  File "lib\site-packages\pgmagick\__init__.py", line 16, in __init__
    _pgmagick.Blob.__init__(self, *args)
Boost.Python.ArgumentError: Python argument types in
    Blob.__init__(Blob, _io.BytesIO)
did not match C++ signature:
    __init__(struct _object * __ptr64, class Magick::Blob)
    __init__(class Magick::Blob {lvalue}, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64)

Process finished with exit code 1

iii) StringIO と Blob の使用:

from pgmagick import Image, Blob
from io import StringIO

filepath = 'http://example.com/a.jpeg'
response = requests.get(filepath)
img = Image(Blob(StringIO(response.content)))

エラー出力を生成した

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    img = magick_image(Blob(StringIO(response.content)))
TypeError: initial_value must be str or None, not bytes

Process finished with exit code 1

iv) メモリ内ファイルを使用する:

from pgmagick import Image
from io import BytesIO

filepath = 'http://example.com/a.jpeg'
response = requests.get(filepath)
in_mem_file = io.BytesIO(response.content)
im = Image(in_mem_file)

エラー出力を生成した

Traceback (most recent call last):
  File "test.py", line 15, in <module>
    im = magick_image(in_mem_file)
Boost.Python.ArgumentError: Python argument types in
    Image.__init__(Image, _io.BytesIO)
did not match C++ signature:
    __init__(struct _object * __ptr64, class Magick::Image)
    __init__(class boost::python::api::object, unsigned int, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, enum MagickLib::StorageType, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, unsigned int, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >, enum MagickLib::StorageType, char const * __ptr64)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, unsigned int, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry, unsigned int)
    __init__(struct _object * __ptr64, class Magick::Blob, class Magick::Geometry)
    __init__(struct _object * __ptr64, class Magick::Blob)
    __init__(struct _object * __ptr64, class Magick::Geometry, class Magick::Color)
    __init__(struct _object * __ptr64, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64)

Process finished with exit code 1

v) メモリ内ファイルで urllib を使用する:

from pgmagick import Image
from io import BytesIO
import urllib.request

filepath = 'http://example.com/a.jpeg'
in_mem_file = io.BytesIO()
urllib.request.urlretrieve(filepath, in_mem_file)
im = Image(in_mem_file)

エラー出力を生成した

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    urllib.request.urlretrieve(filepath, in_mem_file)
  File "C:\Python38\lib\urllib\request.py", line 257, in urlretrieve
    tfp = open(filename, 'wb')
TypeError: expected str, bytes or os.PathLike object, not _io.BytesIO

Process finished with exit code 1

したがって、これらの方法はどれも機能しません。

pgmagick と ImageMagick に関連するいくつかのリソースをオンラインで調べましたが、次のように解決策が機能しません。

pgmagick を使用して URL から画像を開く

または、次のように、Python 以外の別のプログラミング言語で記述されています。

リモートURLを使用したimagick

Imagick - URL から画像ファイルを読み取れません。

私はこれに少し立ち往生しているので、これについて何か助けていただければ幸いです。

4

0 に答える 0