jwilk / didjvu Goto Github PK
View Code? Open in Web Editor NEWDjVu encoder with foreground/background separation
Home Page: https://jwilk.net/software/didjvu
License: GNU General Public License v2.0
DjVu encoder with foreground/background separation
Home Page: https://jwilk.net/software/didjvu
License: GNU General Public License v2.0
When I encode the included Scantailored image with content on the lower edge with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2 I get a foreground mask that doesn't contain the lower half on the lower edge of the picture.
./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zip
Result
jaarverslagraar.zip
(Watch with djview the lower edge and select foreground to see half of the mask is missing)
I can see no visual reason in the original image to cause this.
Issue reported by rundhis
at Google Code:
I don't know if this is the right place, but it would be very useful if didjvu can separates layers and then save only b/w or foreground.
thank you
During the migration to Python3.10 I have no clue what those XMP-functionalities do. I saw Jakub to recently fix some tests for one of the XMP-possibilities, but my install just complains about some modules not installed.
What XMP-possibilities should be availabe in a new Python3.10 version, and with what Linux distribution and installing what packages/steps can I see the original tests complete with Python2.7?
One of the tricks used in the commercial DjVu to keep it small is to involve the foreground mask to code invisible parts in the background picture behind the foreground mask with the least memory hogging filler.
However when I encode a text and a logo that mostly end up in the foreground mask I see a lot of fuzz in the background picture behind or around the text that won't be missing at all, but take more space than needed. I can leave out the background by selecting foreground in Djview4 and don't miss any relevant details.
Reproduction steps just the same as in #16: (ignore the issue in the bottom line of the picture):
When I encode the included Scantailored image with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2
./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zipResult
jaarverslagraar.zip
Issue reported by sumacs
at Bitbucket:
Hi.
When I create a djvu file with a shared shape dictionary, the resulting dictionary files are all 21 bytes in size. The chosen number of pages per dictionary is correct. According to notifications, all dependencies are satisfied for didjvu and for the program minidjvu. I am using the Linux distro Lubuntu with version 0.2.7 of didjvu and version 0.8 of minidjvu. The Gamera version is 3.3.3. Lubuntu uses the Ubuntu repositories. I tried using the 0.6 version of didjvu and got the same result. All python-related programs and dependencies look to be all right.
The minidjvu program on its own does create a dictionary that works correctly. Perhaps the two programs are not connected properly to each other, but the sudo apt-get program was used to install both successfully.
For me this challenge is major because I would like to create the best djvu files possible in terms of making full use of the compressions available.. Your program is the only one I have seen that includes not only the dictionary, but also the ability to subsample the fg and the bg. The server any2djvu offers the first option only, and the special program djvudigital (gsdjvu) allows fg and bg adjustments, but no dictionary.
Any suggestions regarding this issue are appreciated.
Thanks for creating this useful program.
Stephen Jones
Toronto
Issue reported by t.g.enderle
at Google Code:
when calling
$ didjvu encode -o foo.djvu -v -m "abutaleb" bar.pnm
i got the following error:
/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py:309: RuntimeWarning: Working around memory leak in the Gamera library
gamera.init()
out1.pnm:
- reading image
Traceback (most recent call last):
File "/usr/local/bin/didjvu", line 25, in <module>
didjvu.main()
File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 300, in __init__
parser.parse_args(actions=self)
File "/usr/local/lib/python2.6/dist-packages/didjvu/cli.py", line 147, in parse_args
return action(o)
File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 344, in encode
self.encode_one(o, input, mask, output)
File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 364, in encode_one
mask = generate_mask(mask_filename, image, o.method)
File "/usr/local/lib/python2.6/dist-packages/didjvu/didjvu.py", line 212, in generate_mask
return method(image)
TypeError: 'str' object is not callable
a quick fix is attached
Attachment: fix_convert_method_from_string.diff
Issue reported by @jsbien:
Cf. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743677
BTW, my intention is to make a completely lossless convertions, that's why I use --fg-subsample 1 --bg-subsample 1
(I hope I understand correctly the meaning of this options).
./didjvu bundle test.tif test.tif -o jaarverslagraar10k.djvu --fg-slices 100 -d 600 --bg-slices 0 --pages-per-dict 2
with test.tif the same picture of my previous issues renamed:
djvudump jaarverslagraar10k.djvu
FORM:DJVM [61329]
DIRM [52] Document directory (bundled, 3 files 2 pages)
FORM:DJVI [13] {test.iff} [I]
Djbz [1] JB2 shared dictionary
FORM:DJVU [30613] {test.djvu} [P1]
INFO [10] DjVu 4364x6896, v24, 600 dpi, gamma=2.2
INCL [8] Indirection chunk --> {test.iff}
Sjbz [18099] JB2 bilevel data
FG44 [12199] IW4 data #1, 100 slices, v1.2 (color), 728x1150
BG44 [251] IW4 data #1, 97 slices, v1.2 (b&w), 364x575
FORM:DJVU [30613] {test.1.djvu} [P2]
INFO [10] DjVu 4364x6896, v24, 600 dpi, gamma=2.2
INCL [8] Indirection chunk --> {test.iff}
Sjbz [18099] JB2 bilevel data
FG44 [12199] IW4 data #1, 100 slices, v1.2 (color), 728x1150
BG44 [251] IW4 data #1, 97 slices, v1.2 (b&w), 364x575
while using --lossy in the same statement
./didjvu bundle test.tif test.tif -o jaarverslagraar10j.djvu --fg-slices 100 -d 600 --bg-slices 0 --lossy --pages-per-dict 2
Does create a relevant djbz, but the pages have different remaining JB2 bilevel data, so there must be something wrong:
djvudump jaarverslagraar10j.djvu
FORM:DJVM [38327]
DIRM [54] Document directory (bundled, 3 files 2 pages)
FORM:DJVI [8209] {test.iff} [I]
Djbz [8197] JB2 shared dictionary
FORM:DJVU [14995] {test.djvu} [P1]
INFO [10] DjVu 4364x6896, v24, 600 dpi, gamma=2.2
INCL [8] Indirection chunk --> {test.iff}
Sjbz [2482] JB2 bilevel data
FG44 [12199] IW4 data #1, 100 slices, v1.2 (color), 728x1150
BG44 [251] IW4 data #1, 97 slices, v1.2 (b&w), 364x575
FORM:DJVU [15031] {test.1.djvu} [P2]
INFO [10] DjVu 4364x6896, v24, 600 dpi, gamma=2.2
INCL [8] Indirection chunk --> {test.iff}
Sjbz [2517] JB2 bilevel data
FG44 [12199] IW4 data #1, 100 slices, v1.2 (color), 728x1150
BG44 [251] IW4 data #1, 97 slices, v1.2 (b&w), 364x575
Python 2 will be EOL end of 2019. Distributions will stop shipping it. https://pythonclock.org/
Issue reported by mchls5714
at Google Code:
What steps will reproduce the problem?
didjvu encode -o test.djvu pict.jpg
(same problem with tif instead of jpg)
What is the expected output? What do you see instead?
didjvu encode -o test.djvu pict.jpg
Traceback (most recent call last):
File "/usr/local/bin/didjvu", line 7, in <module>
from didjvu import didjvu
File "/usr/local/lib/python3.2/dist-packages/didjvu/didjvu.py", line 23, in <module>
from . import cli
File "/usr/local/lib/python3.2/dist-packages/didjvu/cli.py", line 23, in <module>
from . import djvu_extra as djvu
File "/usr/local/lib/python3.2/dist-packages/didjvu/djvu_extra.py", line 22, in <module>
from . import ipc
File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 50, in <module>
class CalledProcessInterrupted(CalledProcessError):
File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 52, in CalledProcessInterrupted
_signal_names = get_signal_names()
File "/usr/local/lib/python3.2/dist-packages/didjvu/ipc.py", line 46, in get_signal_names
return dict((no, name) for name, no in data.iteritems())
AttributeError: 'dict' object has no attribute 'iteritems'
What version of the product are you using? On what operating system?
Latest version: e6e28e1
Ubuntu 11.04
When I try to lower the footprint of the irrelevant background picture with --bg-subsample 12 the previously invisible spots are blown up in a way they become annoying.
Reproduction steps just the same as in #16, except for the --bg-subsample 12 option:
When I encode the included Scantailored image with this statement in the standard didjvu (master from jwilk) with Python2.7 and
http://nl.archive.ubuntu.com/ubuntu/pool/universe/g/gamera/python-gamera_3.4.2+git20160808.1725654-2_amd64.deb in Mint 20.2
./didjvu encode ~/scantailorin/out/outputbase2-000-raar-effect-onderste-regel-didjvu\ zonder\ tekst.tif -o jaarverslagraar.djvu
--bg-subsample 12
outputbase2-000-raar-effect-onderste-regel-didjvu zonder tekst.zipResult
When skimming through the code of lib.didjvu
, we define a custom log level NOSY
inside setup_logging
. Given the name, this might make sense, but NOISY
seems quite more common and might easily be a typo.
Is the NOSY
log level name intended or does this actually have a typo?
When doing some tests refactoring on my Python 3 fork of this project, I stumbled upon some Python warning regarding unclosed files which appeared to not be referenced any more:
/home/me/github/jwilk/didjvu/tests/test_gamera.py:60: ResourceWarning: unclosed file <_io.BufferedReader name='/home/me/github/jwilk/didjvu/tests/data/greyscale-packbits.tiff'>
in_image = gamera_support.load_image(path)
Object allocated at (most recent call last):
File /home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 79
self._test_methods('greyscale-packbits.tiff')
File "/home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 73
self._test_one_method(filename=filename, method=method, kwargs=kwargs)
File "/home/me/github/jwilk/didjvu/tests/test_gamera.py", lineno 60
in_image = gamera_support.load_image(path)
File "/home/me/github/jwilk/didjvu/lib/gamera_support.py", lineno 65
pil_image = PILImage.open(filename)
File "/home/me/github/jwilk/env/lib/python3.8/site-packages/PIL/Image.py", lineno 2968
fp = builtins.open(filename, "rb")
The issue seems to be that the corresponding method loads the image using PIL at the beginning (pil_image = PIL.open(filename)
), but does not seem to be required any more after having passed it into the corresponding Gamera loader methods. Just calling pil_image.close()
at the end of the moment seems to fix this - at least all existing tests still pass.
Please note that while this appeared in the Python 3 version only and I am not able to tell you which configuration change suddenly brought this warning up, I had a look at the offending code as well and assume that correctly closing the file there should make sense for the Python 2 case as well.
Issue reported by t.g.enderle
at Google Code:
What steps will reproduce the problem?
didjvu bundle -d 600 -o foo.djvu out14.pnm ../new3/out14.pnm out15.pnm
What is the expected output? What do you see instead?
out14.pnm
and ../new3/out14.pnm
are different. However, in the resulting djvu, the second (in new3) is included twice, the first not at all. Probably this is a problem with temporary file naming.
What version of the product are you using? On what operating system?
2.8
Please provide any additional information below.
The following is the output, which looks ok.
ImportError: numpy.core.multiarray failed to import
out14.pnm:
- reading image
- converting to DjVu
- 0.020 bits/pixel; 49.009:1, 97.96% saved, 4348129 bytes in, 88721 bytes out
../new3/out14.pnm:
- reading image
- converting to DjVu
- 0.027 bits/pixel; 37.403:1, 97.33% saved, 4348129 bytes in, 116251 bytes out
out15.pnm:
- reading image
- converting to DjVu
- 0.007 bits/pixel; 150.950:1, 99.34% saved, 4348129 bytes in, 28805 bytes out
bundling
❓ Maybe add size method?
Is <- thumbnail(I, WxH -> RxR) //small image
Ib <- bicubic(Is, RxR -> WxH) //upscale small image
Ith <- (sign(I - Ib + delta) < 0) ? 0 : 255 //threshold
🔗 See also hsnr-gamera/gamera-3#27
To create an IW44 layer, didjvu:
/tmp
(or in $TMPDIR
)Unfortunately, c44 deletes the output file, and then creates a new one under the same name (without O_EXCL). This opens a race window, during which malicious local user could create their own file under this name.
This bug was fixed in didjvu 0.4 (changeset f569445).
If you print and scan this document:
https://www.kvk.nl/download/Formulier-14-wijziging-ondernemings-en-vestigingsgegevens_tcm109-365607.pdf
the resulting DJBZ of didjvu with its default djvu-binarizer contains inverted tiles of text, while DjVuSolo3.1 inverts those, to only maintain the smaller elements within a big surface and use the background color for the colored frame.
I already read a probably expired patent mentioning this, so this should be getting attention. didjvu uses Gamera (include/plugins/threshold.hpp) djvu_threshold for this binarization, so this issue should probably be propagated to gamera.
Issue reported by @jsbien:
Both options are described in the identical way:
Specifies the foreground/background subsampling ratio
but the default various are different!
Issue reported by @jsbien:
Why the default foreground subsampling is larger than the default background one?
Apparently the --pages-per-dict
option causes file descriptor leak:
$ didjvu bundle --pages-per-dict=10 *.tiff -o tmp.djvu
⋮
0255.tiff:
- reading image
- converting to DjVu
Traceback (most recent call last):
File "/home/jwilk/.local/bin/didjvu", line 25, in <module>
didjvu.main()
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 203, in __init__
parser.parse_args(actions=self)
File "/home/jwilk/.local/share/didjvu/lib/cli.py", line 348, in parse_args
return action(o)
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 355, in bundle
self.bundle_complex(o)
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 438, in bundle_complex
itertools.repeat(pixels)
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 68, in parallel_for
f(o, *args)
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 410, in _bundle_complex_page
page.djvu = image_to_djvu(width, height, image, mask, options=o)
File "/home/jwilk/.local/share/didjvu/lib/didjvu.py", line 161, in image_to_djvu
sjbz = djvu.bitonal_to_djvu(gamera.to_pil_1bpp(mask), loss_level=loss_level)
File "/home/jwilk/.local/share/didjvu/lib/djvu_support.py", line 81, in bitonal_to_djvu
return utils.Proxy(djvu_file, ipc.Subprocess(args).wait, [pbm_file])
File "/home/jwilk/.local/share/didjvu/lib/ipc.py", line 107, in __init__
subprocess.Popen.__init__(self, *args, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 928, in _execute_child
errpipe_read, errpipe_write = self.pipe_cloexec()
File "/usr/lib/python2.7/subprocess.py", line 865, in pipe_cloexec
r, w = os.pipe()
OSError: [Errno 24] Too many open files: 'cjb2'
I recently had a look at the cloud-engine behind avepdf.com for MRC-compressing the text on a logo.
Loïc, one of the main programmers, liked to improve the logo to reach the quality DjVuSolo 3.1 reaches.
I see this logo is also an issue with didjvu.
Source:
210913 nog 2-000na.zip
Result
logotext-not-sharp.zip
The blue letters post should also be in the foreground-mask to get it sharp.
./didjvu encode ~/Afbeeldingen/scantailorin/210913\ nog\ 2-000na.tif -o logotext-not-sharp.djvu
Issue reported by cyberdoud
at Google Code:
On MacOSX Lion, using sudo pip to install didjvu raises a permission error.
The pip.log file contains:
Downloading from URL http://pypi.python.org/packages/source/d/didjvu/didjvu-0$
Running setup.py egg_info for package didjvu
running egg_info
creating pip-egg-info/didjvu.egg-info
writing pip-egg-info/didjvu.egg-info/PKG-INFO
writing top-level names to pip-egg-info/didjvu.egg-info/top_level.txt
writing dependency_links to pip-egg-info/didjvu.egg-info/dependency_links.t$
writing manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
warning: manifest_maker: standard file '-c' not found
reading manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pip-egg-info/didjvu.egg-info/SOURCES.txt'
Installing collected packages: didjvu
Running setup.py install for didjvu
Running command /usr/bin/python -c "import setuptools;__file__='/Users/bert$
running install
running build
running install
running build
running build_doc
./tools/manpage-fixup doc/didjvu.1
unable to execute ./tools/manpage-fixup: Permission denied
error: command './tools/manpage-fixup' failed with exit status 1
Complete output from command /usr/bin/python -c "import setuptools;__file__$
running install
running build
running build_doc
./tools/manpage-fixup doc/didjvu.1
unable to execute ./tools/manpage-fixup: Permission denied
unable to execute ./tools/manpage-fixup: Permission denied
error: command './tools/manpage-fixup' failed with exit status 1
----------------------------------------
Command /usr/bin/python -c "import setuptools;__file__='/Users/*****/bu$
Exception information:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py"$
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/commands/instal$
requirement_set.install(install_options, global_options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 1$
requirement.install(install_options, global_options)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/req.py", line 5$
cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", l$
cwd=self.source_dir, filter_stdout=self._filter_install, show_stdout=False)
File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", l$
% (command_desc, proc.returncode, cwd))
InstallationError: Command /usr/bin/python -c "import setuptools;__file__='/Use$
I had this patch that adds -j
/--jobs
lying around:
diff --git a/lib/cli.py b/lib/cli.py
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -61,6 +61,17 @@
def __call__(self):
return self.x
+def get_cpu_count():
+ try:
+ import multiprocessing
+ return multiprocessing.cpu_count()
+ except (ImportError, NotImplementedError):
+ pass
+ try:
+ return os.sysconf('SC_NPROCESSORS_ONLN')
+ except (ValueError, OSError, AttributeError):
+ return 1
+
class ArgumentParser(argparse.ArgumentParser):
def __init__(self, methods, default_method):
@@ -98,6 +109,7 @@
if p is p_bundle:
p.add_argument('-p', '--pages-per-dict', type=int, metavar='N', help='how many pages to compress in one pass')
p.add_argument('-m', '--method', choices=methods, default=default_method, help='binarization method')
+ p.add_argument('-j', '--jobs', dest='n_jobs', metavar='N', nargs='?', type=int, default=1, help='number of jobs to run simultaneously')
p.add_argument('-v', '--verbose', dest='verbosity', action='append_const', const=None, help='more informational messages')
p.add_argument('-q', '--quiet', dest='verbosity', action='store_const', const=[], help='no informational messages')
p.add_argument('input', metavar='<input-image>', nargs='+')
@@ -146,6 +158,8 @@
o.pages_per_dict = 1
action = getattr(actions, vars(o).pop('_action_'))
o.method = self.__methods[o.method]
+ if o.n_jobs is None:
+ o.n_jobs = get_cpu_count()
return action(o)
__all__ = ['ArgumentParser']
diff --git a/lib/didjvu.py b/lib/didjvu.py
--- a/lib/didjvu.py
+++ b/lib/didjvu.py
@@ -14,12 +14,18 @@
from __future__ import with_statement
+import functools
import itertools
import os
import re
import logging
import sys
+try:
+ import multiprocessing.dummy as multiprocessing
+except ImportError:
+ multiprocessing = None
+
from . import cli
from . import djvu_extra as djvu
from . import filetype
@@ -49,9 +55,18 @@
handler.setFormatter(formatter)
ipc_logger.addHandler(handler)
+def _explode(f, a, b):
+ return f(a, *b)
+
def parallel_for(o, f, *iterables):
- for args in zip(*iterables):
- f(o, *args)
+ iterables = map(list, iterables)
+ assert max(map(len, iterables)) == min(map(len, iterables))
+ if o.n_jobs <= 1 or multiprocessing is None:
+ for args in zip(*iterables):
+ f(o, *args)
+ else:
+ pool = multiprocessing.Pool(o.n_jobs)
+ pool.map(functools.partial(_explode, f, o), zip(*iterables))
def check_tty():
if sys.stdout.isatty():
It no longer applies cleanly and IIRC it didn't work correctly.
Issue reported by @danstender:
Running the tests of 4.0 when python-libxmp 2.0.1 is available there are some assertion errors,:
tests.test_xmp.test_metadata.test_empty(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_empty(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_empty(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_empty(pyexiv2_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_new(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_new(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_new(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_new(pyexiv2_backend, libxmp_checker) ... FAIL
tests.test_xmp.test_metadata.test_updated(libxmp_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_updated(libxmp_backend, libxmp_checker) ... ok
tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, exiv2_checker) ... SKIP: [Errno 2] No such file or directory: 'exiv2'
tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, libxmp_checker) ... FAIL
tests.test_xmp.test_uuid ... ok
tests.test_xmp.test_namespaces ... ok
======================================================================
FAIL: tests.test_xmp.test_metadata.test_new(pyexiv2_backend, libxmp_checker)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/«PKGBUILDDIR»/tests/test_xmp.py", line 270, in test
assert_equal(get(ns.xmpmm, 'History[1]/stEvt:when'), str(mod_date))
AssertionError: u'2015-05-12T10:26:01-00:00' != '2015-05-12T10:26:01Z'
======================================================================
FAIL: tests.test_xmp.test_metadata.test_updated(pyexiv2_backend, libxmp_checker)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
File "/«PKGBUILDDIR»/tests/test_xmp.py", line 402, in test
assert_equal(get(ns.xmpmm, 'History[2]/stEvt:when'), mod_date)
AssertionError: u'2015-05-12T10:26:01-00:00' != u'2015-05-12T10:26:01Z'
- 2015-05-12T10:26:01-00:00
? ^^^^^^
+ 2015-05-12T10:26:01Z
? ^
Best,
DS
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.