diff --git a/src/calibre/srv/utils.py b/src/calibre/srv/utils.py
index 1c4b891e11..63765cd969 100644
--- a/src/calibre/srv/utils.py
+++ b/src/calibre/srv/utils.py
@@ -466,3 +466,6 @@ class ReadOnlyFileBuffer(object):
def getvalue(self):
return self.mv
+ def close(self):
+ pass
+
diff --git a/src/calibre/test_build.py b/src/calibre/test_build.py
index d0799cf96f..a7208699f6 100644
--- a/src/calibre/test_build.py
+++ b/src/calibre/test_build.py
@@ -12,8 +12,10 @@ __docformat__ = 'restructuredtext en'
Test a binary calibre build to ensure that all needed binary images/libraries have loaded.
'''
-import cStringIO, os, ctypes
+import cStringIO, os, ctypes, shutil
+from calibre import CurrentDir
from calibre.constants import plugins, iswindows, islinux, isosx
+from calibre.ptempfile import TemporaryDirectory
def test_dlls():
import win32api
@@ -239,10 +241,27 @@ def test_markdown():
sanitize_html(b'''xxx
''')
print('Markdown OK!')
+def test_image_compression():
+ from calibre.utils.img import optimize_png, optimize_jpeg, encode_jpeg
+ with TemporaryDirectory() as tdir, CurrentDir(tdir):
+ shutil.copyfile(I('devices/kindle.jpg'), 'test.jpg')
+ ret = optimize_jpeg('test.jpg')
+ if ret is not None:
+ raise SystemExit(ret)
+ ret = encode_jpeg('test.jpg')
+ if ret is not None:
+ raise SystemExit(ret)
+ shutil.copyfile(I('lt.png'), 'test.png')
+ ret = optimize_png('test.png')
+ if ret is not None:
+ raise SystemExit(ret)
+ print('Image compression OK!')
+
def test():
if iswindows:
test_dlls()
test_plugins()
+ test_image_compression()
test_lzma()
test_dukpy()
test_spell()
diff --git a/src/calibre/utils/img.py b/src/calibre/utils/img.py
index bd91b64f38..5a1426505d 100644
--- a/src/calibre/utils/img.py
+++ b/src/calibre/utils/img.py
@@ -98,7 +98,7 @@ def run_optimizer(file_path, cmd, as_filter=False, input_data=None):
inw = Thread(name='CopyInput', target=copy, args=(src, p.stdin))
inw.daemon = True
inw.start()
- outw = Thread('CopyOutput', target=copy, args=(p.stdout, outf))
+ outw = Thread(name='CopyOutput', target=copy, args=(p.stdout, outf))
outw.daemon = True
outw.start()
raw = force_unicode(stderr.read())
@@ -137,4 +137,4 @@ def encode_jpeg(file_path, quality=80):
buf.open(QBuffer.WriteOnly)
if not img.save(buf, 'PPM'):
raise ValueError('Failed to export image to PPM')
- return run_optimizer(file_path, cmd, as_filter=True, input_data=ReadOnlyFileBuffer(ba.data))
+ return run_optimizer(file_path, cmd, as_filter=True, input_data=ReadOnlyFileBuffer(ba.data()))