以编程方式选择将图像转换为JPEG或PNG以供Silverlight显示
以编程方式选择将图像转换为JPEG或PNG以供Silverlight显示
我有一个项目,需要将大量的图像类型转换为可在Silverlight应用程序中显示的格式 - TIFF,GIF,WMF,EMF,BMP,DIB等。我可以在服务器上进行这些转换,然后再为Silverlight应用程序提供数据。
然而,我不确定应该在何时选择将其转换为哪种格式,是JPG还是PNG。是否有一些标准,比如TIFF应该始终是JPEG,GIF应该始终是PNG。或者,如果BMP是24位,应该转换为JPEG - 如果更低,则可以是PNG。或者一切都是PNG,原因是什么?
通常在回答这类问题时,我会看到类似于“嗯,如果图片是照片,用JPEG”或“如果有直线,PNG更好”。不幸的是,我将没有浏览任何图像文件的机会,而希望通过代码以标准的方式完成这个任务,即使那意味着有很多if/then语句。
这个主题是否有任何标准或最佳实践?
问题的出现原因:在Silverlight显示图像时,需要选择使用JPEG格式还是PNG格式,但是如何选择合适的格式呢?
解决方法:
1. 对于JPEG图像,直接将其传递而不进行转换。
2. 对于TIFF文件,如果其中包含JPEG图像,则将其提取为标准的JPEG格式文件;如果不含JPEG图像,则最好将其转换为PNG格式。
3. 对于矢量图像(.emf和.wmf),PNG比JPEG更适合,但最好使用标准的矢量图像格式(.svg)。
以下是整理的
在Silverlight中显示图像时,我们需要选择使用JPEG格式还是PNG格式。那么如何选择合适的图像转换格式呢?下面将介绍一些解决方法。
首先,我们需要了解JPEG和PNG两种格式的特点。JPEG格式通常用于存储照片和复杂的图像,它可以通过有损压缩来减小文件大小,但在一些图像(如线条图)上会产生奇怪的压缩伪影。而PNG格式是一种无损压缩的格式,图像在转换为PNG格式后与原始图像完全一致。
根据以上特点,我们可以得出一些解决方法。首先,对于已经是JPEG格式的图像,没有必要进行转换,直接传递即可。其次,对于TIFF文件,如果其中包含JPEG图像,则应将其提取为标准的JPEG格式文件;如果不含JPEG图像,则最好将其转换为PNG格式。最后,对于矢量图像(.emf和.wmf),PNG格式比JPEG格式更适合,但最好使用标准的矢量图像格式(.svg)。
希望以上解决方法能够帮助您在Silverlight中选择合适的图像转换格式。感谢David提供的宝贵建议,特别是第一和第二点。如果您只能使用PNG和JPEG两种格式,那么这些方法应该能够满足您的需求。
问题的出现原因:
作者想要在自己的应用程序中选择最佳的图像转换格式,以便在Silverlight中显示图像。作者希望能够根据图像文件的一些可查询属性来确定输出格式,例如图像是否具有Alpha通道。
解决方法:
作者提到了一个名为Smush.it的服务,该服务可以告诉用户图像的最佳优化格式,并为用户运行压缩操作。然而,作者希望能够在自己的应用程序中进行转换和压缩操作,而不是通过第三方服务。
作者提出了一个解决方法的示例代码。根据输入图像的格式和属性,选择输出格式为PNG或JPEG。作者的问题是是否存在基于输入的逻辑选择输出格式的方法。
作者想要解决的问题是如何在Silverlight中选择图像转换格式为JPEG或PNG,并提供了一个示例代码来解决该问题。还有一个第三方服务Smush.it,但希望能够在自己的应用程序中进行转换和压缩操作。
问题的原因:选择将图像转换为JPEG或PNG格式用于Silverlight显示时,需要根据文件大小和质量之间的平衡来决定使用哪种格式。JPG格式在文件大小和质量之间提供了很好的平衡,而PNG格式则提供了比JPG更多的灵活性。
解决方法:根据需要选择合适的图像转换格式。如果文件大小不是一个问题,那么PNG格式可能是更好的选择,因为它提供了比JPG更多的灵活性。如果文件大小是一个问题,那么可以选择将图像转换为JPEG格式,以在文件大小和质量之间取得更好的平衡。
以下是一个示例代码,用于在Silverlight中将图像转换为JPEG格式:
using System.Windows.Media.Imaging;
// Load the image from file
BitmapImage bitmap = new BitmapImage(new Uri("image.png", UriKind.Relative));
// Create a new JPEG encoder
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
// Set the quality level (between 1 and 100)
encoder.QualityLevel = 80;
// Create a new memory stream to hold the encoded image
MemoryStream stream = new MemoryStream();
// Save the image to the memory stream using the encoder
encoder.Frames.Add(BitmapFrame.Create(bitmap));
encoder.Save(stream);
// Create a new image control
Image imageControl = new Image();
// Set the source of the image control to the memory stream
imageControl.Source = BitmapFrame.Create(stream);
通过上述代码,可以将图像文件加载到Silverlight中,并将其转换为JPEG格式。可以通过调整编码器的质量级别来控制生成图像的文件大小和质量。将转换后的图像设置为Silverlight中的图像控件的源,以实现在Silverlight中显示JPEG格式的图像。
在选择将图像转换为JPEG或PNG格式用于Silverlight显示时,需要根据文件大小和质量之间的平衡来决定使用哪种格式。JPG格式提供了很好的平衡,而PNG格式提供了更多的灵活性。可以通过编程方式将图像转换为JPEG格式,并在Silverlight中显示。以上提供的示例代码演示了如何在Silverlight中将图像转换为JPEG格式并显示。