private void PerformOptimizations(string path, ImageSettings settings, TextWriter cssLowCompatOutput, List <string> imageLocations) { var spriteInfo = new SpriteInfoBuilder().Build(settings, imageLocations); if (spriteInfo.Images.Count > 0) { GenerateSprite(path, settings, spriteInfo, cssLowCompatOutput); } }
private ImageSettings GetSettings(string path) { var settings = new ImageSettings(); string settingFileLocation = Path.Combine(path, SettingsFileName); if (!File.Exists(settingFileLocation)) { return(settings); } XmlTextReader settingsData; // Open the settings file. If it fails here, we throw an exception since we expect the file to be there and readable. using (settingsData = new XmlTextReader(settingFileLocation)) { while (settingsData.Read()) { if (settingsData.NodeType == XmlNodeType.Element) { string nodeName = settingsData.Name; if (nodeName.Equals("FileFormat", StringComparison.OrdinalIgnoreCase)) { settings.Format = settingsData.ReadElementContentAsString().Trim('.'); } else if (nodeName.Equals("Quality", StringComparison.OrdinalIgnoreCase)) { settings.Quality = settingsData.ReadElementContentAsInt(); } else if (nodeName.Equals("MaxSize", StringComparison.OrdinalIgnoreCase)) { settings.MaxSize = settingsData.ReadElementContentAsInt(); } else if (nodeName.Equals("BackgroundColor", StringComparison.OrdinalIgnoreCase)) { string output = settingsData.ReadElementContentAsString(); int temp = Int32.Parse(output, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.BackgroundColor = Color.FromArgb(temp); } else if (nodeName.Equals("Base64Encoding", StringComparison.OrdinalIgnoreCase)) { settings.Base64 = settingsData.ReadElementContentAsBoolean(); } else if (nodeName.Equals("TileInXAxis", StringComparison.OrdinalIgnoreCase)) { settings.TileInXAxis = settingsData.ReadElementContentAsBoolean(); } } } } return(settings); }
private void GenerateSprite(string path, ImageSettings settings, SpriteInfo spriteInfo, TextWriter cssLowCompatOutput) { using (Bitmap sprite = new Bitmap(spriteInfo.Width, spriteInfo.Height)) { using (Graphics drawingSurface = Graphics.FromImage(sprite)) { // Set the background to the specs from the settings file drawingSurface.Clear(settings.BackgroundColor); // Make the final sprite and save it foreach (var image in spriteInfo.Images) { drawingSurface.DrawImage(image.Bitmap, new Rectangle(image.Position.XOffset, image.Position.YOffset, image.Bitmap.Width, image.Bitmap.Height)); // Add the CSS data GenerateCss(image, settings.Format, cssLowCompatOutput); var hoverImage = image.HoverImage; if (hoverImage != null) { drawingSurface.DrawImage(hoverImage.Bitmap, new Rectangle(hoverImage.Position.XOffset, hoverImage.Position.YOffset, hoverImage.Bitmap.Width, hoverImage.Bitmap.Height)); } } // Set the encoder parameters and make the image try { using (EncoderParameters spriteEncoderParameters = new EncoderParameters(1)) { spriteEncoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, settings.Quality); // Attempt to save the image to disk with the specified encoder sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format)), GetEncoderInfo(settings.Format), spriteEncoderParameters); } } catch (Exception) { // If errors occur, get the CLI to auto-choose an encoder. Unfortunately this means that the quality settings will be not used. try { sprite.Save(Path.Combine(path, GenerateSpriteFileName(settings.Format))); } catch (Exception) { // If errors occur again, try to save as a png sprite.Save(Path.Combine(path, GenerateSpriteFileName("png"))); } } } } }
public SpriteInfo Build(ImageSettings settings, List <string> imageLocations) { _spriteInfo = new SpriteInfo(); _settings = settings; var imagePairs = new HoverGenerator().Generate(imageLocations); int totalImages = 0; foreach (var imagePath in imagePairs) { var imageInfo = new ImageInfo { FileName = imagePath.Key, Bitmap = new Bitmap(imagePath.Key), }; UpdateSizes(imageInfo); totalImages++; var hoverPath = imagePath.Value; if (hoverPath != null) { var hoverInfo = new ImageInfo { FileName = hoverPath, Bitmap = new Bitmap(hoverPath) }; UpdateSizes(hoverInfo); totalImages++; imageInfo.HoverImage = hoverInfo; } _spriteInfo.Images.Add(imageInfo); } // Create a drawing surface and add the images to it // Since we'll be padding each image by 1px later on, we need to increase the sprites's size correspondingly. if (settings.TileInXAxis) { _spriteInfo.Width += totalImages; } else { _spriteInfo.Height += totalImages; } return(_spriteInfo); }
public SpriteInfo Build(ImageSettings settings, List<string> imageLocations) { _spriteInfo = new SpriteInfo(); _settings = settings; var imagePairs = new HoverGenerator().Generate(imageLocations); int totalImages = 0; foreach (var imagePath in imagePairs) { var imageInfo = new ImageInfo { FileName = imagePath.Key, Bitmap = new Bitmap(imagePath.Key), }; UpdateSizes(imageInfo); totalImages++; var hoverPath = imagePath.Value; if (hoverPath != null) { var hoverInfo = new ImageInfo { FileName = hoverPath, Bitmap = new Bitmap(hoverPath) }; UpdateSizes(hoverInfo); totalImages++; imageInfo.HoverImage = hoverInfo; } _spriteInfo.Images.Add(imageInfo); } // Create a drawing surface and add the images to it // Since we'll be padding each image by 1px later on, we need to increase the sprites's size correspondingly. if (settings.TileInXAxis) { _spriteInfo.Width += totalImages; } else { _spriteInfo.Height += totalImages; } return _spriteInfo; }
private void PerformOptimizations(string path, ImageSettings settings, TextWriter cssLowCompatOutput, List<string> imageLocations) { var spriteInfo = new SpriteInfoBuilder().Build(settings, imageLocations); if (spriteInfo.Images.Count > 0) { GenerateSprite(path, settings, spriteInfo, cssLowCompatOutput); } }
private ImageSettings GetSettings(string path) { var settings = new ImageSettings(); string settingFileLocation = Path.Combine(path, SettingsFileName); if (!File.Exists(settingFileLocation)) { return settings; } XmlTextReader settingsData; // Open the settings file. If it fails here, we throw an exception since we expect the file to be there and readable. using (settingsData = new XmlTextReader(settingFileLocation)) { while (settingsData.Read()) { if (settingsData.NodeType == XmlNodeType.Element) { string nodeName = settingsData.Name; if (nodeName.Equals("FileFormat", StringComparison.OrdinalIgnoreCase)) { settings.Format = settingsData.ReadElementContentAsString().Trim('.'); } else if (nodeName.Equals("Quality", StringComparison.OrdinalIgnoreCase)) { settings.Quality = settingsData.ReadElementContentAsInt(); } else if (nodeName.Equals("MaxSize", StringComparison.OrdinalIgnoreCase)) { settings.MaxSize = settingsData.ReadElementContentAsInt(); } else if (nodeName.Equals("BackgroundColor", StringComparison.OrdinalIgnoreCase)) { string output = settingsData.ReadElementContentAsString(); int temp = Int32.Parse(output, NumberStyles.HexNumber, CultureInfo.InvariantCulture); settings.BackgroundColor = Color.FromArgb(temp); } else if (nodeName.Equals("Base64Encoding", StringComparison.OrdinalIgnoreCase)) { settings.Base64 = settingsData.ReadElementContentAsBoolean(); } else if (nodeName.Equals("TileInXAxis", StringComparison.OrdinalIgnoreCase)) { settings.TileInXAxis = settingsData.ReadElementContentAsBoolean(); } } } } return settings; }