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); }
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(); }
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); }
protected bool CanUseImageFormatCompression(ImageConfiguration configuration) { return(configuration.HasCompression && ImageFormatFactory.GetFormat(configuration.Format).CompressionType == configuration.Compression.Type); }