- synfig::info("joining images");
- unsigned int delay = round_to_int(100.0 / desc.get_frame_rate());
- for_each(images.begin(), images.end(), Magick::animationDelayImage(delay));
+ bool multiple_images = images.size() != 1;
+ bool can_adjoin = false;
+
+ if (multiple_images)
+ {
+ // check whether this file format supports multiple-image files
+ Magick::Image image(*(images.begin()));
+ image.fileName(filename);
+ try
+ {
+ SetImageInfo(image.imageInfo(),Magick::MagickTrue,&exceptionInfo);
+ can_adjoin = image.adjoin();
+ }
+ catch(Magick::Warning warning) {
+ synfig::warning("exception '%s'", warning.what());
+ }
+ }
+
+ // the file type is now in image.imageInfo()->magick and
+ // image.adjoin() tells us whether we can write to a single file
+ if (can_adjoin)
+ {
+ synfig::info("joining images");
+ unsigned int delay = round_to_int(100.0 / desc.get_frame_rate());
+ for_each(images.begin(), images.end(), Magick::animationDelayImage(delay));