Ejemplo n.º 1
0
        /// <summary>
        /// Returns true when the supplied stream is supported.
        /// </summary>
        /// <param name="stream">The stream to check.</param>
        /// <returns>True when the supplied stream is supported.</returns>
        public bool IsSupported(Stream stream)
        {
            Throw.IfNull(nameof(stream), stream);

            if (!stream.CanRead || !stream.CanWrite || !stream.CanSeek)
            {
                return(false);
            }

            long             startPosition = stream.Position;
            IMagickImageInfo info          = new MagickImageInfo(stream);

            stream.Position = startPosition;
            return(IsSupported(MagickFormatInfo.Create(info.Format)));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Read basic information about an image with multiple frames/pages.
        /// </summary>
        /// <param name="data">The span of bytes to read the information from.</param>
        /// <returns>A <see cref="IMagickImageInfo"/> iteration.</returns>
        /// <exception cref="MagickException">Thrown when an error is raised by ImageMagick.</exception>
        public static IReadOnlyCollection <IMagickImageInfo> ReadCollection(ReadOnlySpan <byte> data)
        {
            var result = new List <MagickImageInfo>();

            using (var images = new MagickImageCollection())
            {
                images.Ping(data);
                foreach (var image in images)
                {
                    var info = new MagickImageInfo();
                    info.Initialize(image);
                    result.Add(info);
                }
            }

            return(result);
        }
Ejemplo n.º 3
0
        private IImageOptimizer GetOptimizer(Stream stream)
        {
            long            position  = stream.Position;
            MagickImageInfo imageInfo = new MagickImageInfo(stream);

            stream.Position = position;

            MagickFormatInfo info = MagickNET.GetFormatInformation(imageInfo.Format);

            foreach (IImageOptimizer optimizer in _optimizers)
            {
                if (optimizer.Format.Module == info.Module)
                {
                    return(optimizer);
                }
            }

            throw new MagickCorruptImageErrorException("Invalid format, supported formats are: " + SupportedFormats);
        }
Ejemplo n.º 4
0
        public static MagickFormatInfo GetFormatInformation(Stream stream)
        {
            var startPosition = stream.Position;

            try
            {
                var info = new MagickImageInfo(stream);
                return(MagickNET.GetFormatInformation(info.Format));
            }
            catch
            {
                stream.Position = startPosition;

                return(GetFormatInformationFromHeader(stream));
            }
            finally
            {
                stream.Position = startPosition;
            }
        }