protected virtual async Task <Stream> CreateImageWriterStreamAsync(ImageConfiguration configuration, Stream output, long totalBytes)
        {
            Imaging.ImageFormat imageFormat  = ImageFormatFactory.GetFormat(configuration.Format);
            ImageOptions        imageOptions = GenerateImageOptions(configuration, imageFormat, CalculateImageDimensions(imageFormat, totalBytes));

            Stream imageStream = imageFormat.CreateWriter(imageOptions).CreateOutputStream(output, true, EncodingConfiguration.BufferSize);

            await WriteHeaderAsync(imageStream);

            return(imageStream);
        }
Beispiel #2
0
        public async Task AddMeme(string memeName)
        {
            if (Context.Message.Attachments.FirstOrDefault() is var attachment && attachment == null)
            {
                await ReplyAsync("Nie było żadnego załącznika");

                return;
            }
            var imgFormat = ImageFormatFactory.GetImageFormat(attachment.Filename.Split('.')[1]);
            var stream    = new WebClient().OpenRead(attachment.Url);
            var img       = System.Drawing.Image.FromStream(stream, false, false);

            img.Save(@$ "{await GetMemePathAsync()}{memeName}.{imgFormat.ToString()}", imgFormat);
            await ReplyAsync($"Udało się pomyślnie dodać mema: **{memeName}**");

            await Context.Message.DeleteAsync();
        }
Beispiel #3
0
        public Tests()
        {
            _adminSubsonicServer       = new SubsonicServer(SubsonicServer, AdminUser, Password, ClientName);
            _downloadSubsonicServer    = new SubsonicServer(SubsonicServer, DownloadUser, Password, ClientName);
            _noPlaySubsonicServer      = new SubsonicServer(SubsonicServer, NoPlayUser, Password, ClientName);
            _playSubsonicServer        = new SubsonicServer(SubsonicServer, PlayUser, Password, ClientName);
            _nonexistentSubsonicServer = new SubsonicServer(NonexistentServer, AdminUser, Password, ClientName);

            var imageFormatFactory = new ImageFormatFactory();

            _adminSubsonicClient       = new SubsonicClient(_adminSubsonicServer, imageFormatFactory);
            _downloadSubsonicClient    = new SubsonicClient(_downloadSubsonicServer, imageFormatFactory);
            _noPlaySubsonicClient      = new SubsonicClient(_noPlaySubsonicServer, imageFormatFactory);
            _playSubsonicClient        = new SubsonicClient(_playSubsonicServer, imageFormatFactory);
            _nonexistentSubsonicClient = new SubsonicClient(_nonexistentSubsonicServer, imageFormatFactory);
            _random = new Random(DateTime.UtcNow.Millisecond * DateTime.UtcNow.Second * DateTime.UtcNow.Minute);
        }
        protected override async Task <Stream> CreateImageWriterStreamAsync(ImageConfiguration configuration, Stream output, long totalBytes)
        {
            Imaging.ImageFormat imageFormat = ImageFormatFactory.GetFormat(configuration.Format);

            var pixelStorageSerializer = new PixelStorageOptionsSerializer();

            totalBytes += pixelStorageSerializer.CalculateStorageLength(imageFormat);

            ImageDimensions     embeddedImageDimensions = null;
            PixelStorageOptions pixelStorageOptions;
            Stream embeddedImageStream = null;

            if (configuration.HasEmbeddedImage)
            {
                embeddedImageDimensions = new ImageDimensions(configuration.EmbeddedImage.Image);
                pixelStorageOptions     = _pixelStorageCalculator.CalculatePixelStorageOptions(
                    imageFormat,
                    configuration.EmbeddedImage.EmbeddedPixelStorage,
                    embeddedImageDimensions,
                    totalBytes);

                embeddedImageStream = imageFormat.LoadPixelDataStream(configuration.EmbeddedImage.Image);
            }
            else
            {
                pixelStorageOptions = imageFormat.PixelStorageWithBitsPerChannel(
                    8,
                    PixelStorageOptions.BitStorageMode.MostSignificantBits);
            }

            byte[] pixelStorageBytes = await pixelStorageSerializer.SerializeToBytesAsync(pixelStorageOptions);

            int embeddedImageRepeats;

            ImageOptions imageOptions = GenerateImageOptions(
                configuration,
                imageFormat,
                CalculateImageDimensions(imageFormat, pixelStorageOptions, embeddedImageDimensions, totalBytes, out embeddedImageRepeats));

            Stream imageStream = imageFormat.CreateWriter(imageOptions).CreateOutputStream(output, true, EncodingConfiguration.BufferSize);

            await WriteHeaderAsync(imageStream);

            await imageStream.WriteAsync(pixelStorageBytes, 0, pixelStorageBytes.Length);

            if (configuration.HasEmbeddedImage)
            {
                var repeatingImageStream = new RepeatingStream(embeddedImageStream, embeddedImageRepeats);
                return(new PixelStorageWriterStream(
                           imageStream,
                           new SubStream(
                               repeatingImageStream,
                               imageStream.Position,
                               repeatingImageStream.Length - repeatingImageStream.Position - imageStream.Position),
                           pixelStorageOptions,
                           leaveOpen: false,
                           bufferSize: EncodingConfiguration.BufferSize));
            }

            return(imageStream);
        }
Beispiel #5
0
 protected bool CanUseImageFormatCompression(ImageConfiguration configuration)
 {
     return(configuration.HasCompression &&
            ImageFormatFactory.GetFormat(configuration.Format).CompressionType == configuration.Compression.Type);
 }