SkiaSharp库在NetCore下跨平台图片操作基础使用方法

SkiaSharp库在NetCore下跨平台图片操作基础使用方法:

在跨平台开发中,处理图片是一项常见的需求。而SkiaSharp库是一个强大的工具,它提供了在NetCore平台下进行跨平台图片操作的能力。本文将介绍SkiaSharp库在NetCore下的基础使用方法,以及逐步深入的高级功能。

什么是SkiaSharp?

SkiaSharp是一个跨平台的2D图形库,它提供了强大的绘图和图片处理能力。它基于Google的Skia图形库,并使用C#语言进行封装,支持在多个平台上进行图形渲染和图片操作。在NetCore平台下,我们可以利用SkiaSharp库来进行跨平台图片操作,包括格式转换、剪裁、水印、缩放等高级功能。

安装SkiaSharp库

在开始之前,我们首先需要安装SkiaSharp库。在NetCore项目中,我们可以通过NuGet包管理器来安装SkiaSharp库。在您的项目中,执行以下命令来安装SkiaSharp库:

dotnet add package SkiaSharp

安装完成后,我们就可以开始使用SkiaSharp库来进行跨平台图片操作了。

格式转换

图片格式转换是一项常见的操作,它允许我们将图片从一种格式转换为另一种格式。SkiaSharp库提供了用于格式转换的函数,我们可以通过以下代码来将一张图片从JPEG格式转换为PNG格式:

using SkiaSharp; class Program { static void Main() { // 加载JPEG图片 using (var bitmap = SKBitmap.Decode("input.jpg")) { // 将图片转换为PNG格式 using (var convertedBitmap = bitmap.Copy(SKBitmapConfig.RGBA8888)) { convertedBitmap.Save("converted.png", SKEncodedImageFormat.Png); } } } }

在上述代码中,我们首先加载了一张JPEG格式的图片。然后,通过调用Copy函数并指定目标格式,我们将图片从JPEG格式转换为RGBA8888格式。最后,使用Save函数将转换后的图片保存为PNG格式。

图片剪裁

图片剪裁是一种常用的操作,它允许我们从原始图片中提取出感兴趣的区域。SkiaSharp库提供了用于剪裁的函数,我们可以通过以下代码来剪裁图片:

using SkiaSharp; class Program { static void Main() { // 加载图片 using (var bitmap = SKBitmap.Decode("input.jpg")) { // 定义剪裁区域 var cropRect = new SKRectI(100, 100, 300, 300); // 剪裁图片 using (var croppedBitmap = new SKBitmap(cropRect.Width, cropRect.Height)) { bitmap.ExtractSubset(croppedBitmap, cropRect); croppedBitmap.Save("cropped.png", SKEncodedImageFormat.Png); } } } }

在上述代码中,我们首先加载一张图片。然后,通过定义一个剪裁区域,我们指定了要提取的感兴趣区域的位置和大小。接下来,我们创建一个新的位图对象来存储剪裁后的图片,并使用ExtractSubset函数将剪裁后的图片提取出来。最后,使用Save函数将剪裁后的图片保存为PNG格式。

图片加水印

图片加水印是一种常见的操作,它允许我们在图片上添加自定义的文字或图标。SkiaSharp库提供了绘制函数来实现图片加水印的功能。以下是一个示例代码,演示了如何在一张图片上添加水印:

using SkiaSharp; class Program { static void Main() { // 加载图片 using (var bitmap = SKBitmap.Decode("input.jpg")) { // 加载水印图片 using (var watermark = SKBitmap.Decode("watermark.png")) { // 定义水印位置和大小 var watermarkRect = new SKRectI(0, 0, 100, 50); // 创建绘图表面 using (var surface = SKSurface.Create(new SKImageInfo(bitmap.Width, bitmap.Height))) { var canvas = surface.Canvas; // 绘制原始图片 canvas.DrawBitmap(bitmap, 0, 0); // 绘制水印 canvas.DrawBitmap(watermark, watermarkRect.Left, watermarkRect.Bottom - watermark.Height); // 保存带有水印的图片 using (var outputBitmap = surface.Snapshot()) { outputBitmap.Save("watermarked.png", SKEncodedImageFormat.Png); } } } } } }

在上面的代码中,我们首先加载一张图片和一个水印图片。然后,我们定义了水印的位置和大小。接下来,我们创建一个绘图表面,并使用DrawBitmap函数在表面上绘制原始图片和水印。最后,使用Save函数将带有水印的图片保存为PNG格式。

图片缩放

图片缩放是一项常见的操作,它允许我们调整图片的大小。SkiaSharp库提供了用于缩放的函数,以下是一个示例代码,演示了如何对一张图片进行缩放:

using SkiaSharp; class Program { static void Main() { // 加载图片 using (var bitmap = SKBitmap.Decode("input.jpg")) { // 缩放图片 var scaledBitmap = bitmap.Resize(new SKSizeI(500, 300), SKFilterQuality.High); scaledBitmap.Save("scaled.png", SKEncodedImageFormat.Png); } } }

在上述代码中,我们首先加载一张图片。然后,通过调用Resize函数并指定目标大小和滤波器质量,我们将图片缩放为指定的大小。最后,使用Save函数将缩放后的图片保存为PNG格式。

如果你要按照高度来进行等比缩放,可以根据以下步骤使用SkiaSharp库进行操作:

  1. 导入SkiaSharp命名空间:
using SkiaSharp;
  1. 加载原始图像:
string filePath = "path/to/image.png"; // 图像文件的路径 // 使用SKBitmap加载原始图像 SKBitmap originalBitmap = SKBitmap.Decode(filePath);
  1. 计算缩放后的目标尺寸:
int targetHeight = 600; // 目标高度 // 计算缩放后的目标宽度,保持纵横比 float aspectRatio = (float)originalBitmap.Height / originalBitmap.Width; int targetWidth = (int)(targetHeight / aspectRatio); // 创建缩放后的目标尺寸 SKSizeI targetSize = new SKSizeI(targetWidth, targetHeight);
  1. 创建缩放后的图像:
// 创建缩放后的SKBitmap对象 SKBitmap scaledBitmap = new SKBitmap(targetSize.Width, targetSize.Height); // 使用SKCanvas将原始图像绘制到缩放后的图像上 using (SKCanvas canvas = new SKCanvas(scaledBitmap)) { // 使用SKPaint进行绘制设置,如保持纵横比、插值质量等 using (SKPaint paint = new SKPaint()) { // 设置插值质量为高质量 paint.FilterQuality = SKFilterQuality.High; // 计算绘制的矩形区域,保持纵横比 float scaledWidth = targetHeight / aspectRatio; float scaledHeight = targetHeight; float x = (targetSize.Width - scaledWidth) / 2; float y = 0; SKRect destRect = SKRect.Create(x, y, scaledWidth, scaledHeight); // 绘制原始图像到缩放后的图像上 canvas.DrawBitmap(originalBitmap, destRect, paint); } }

现在,scaledBitmap就是按照高度为准,自动调整宽度进行等比例缩放后的图像。你可以根据需要进行进一步的操作,如保存到文件或显示在界面上。

请注意,上述代码假设原始图像的高度大于0,以避免除以零的错误。在实际应用中,你可能还需要添加适当的错误处理和边界条件检查。

性能方面的建议

在进行跨平台图片操作时,我们也需要注意性能方面的考虑。以下提供一些建议,以帮助改进性能:

  1. 尽可能使用异步操作:在进行耗时的图片处理操作时,考虑使用异步方式,以避免阻塞主线程。

  2. 使用适当的编码格式和压缩参数:根据图片的用途,选择适当的编码格式和压缩参数,以减小图片文件的体积。

  3. 考虑图片缓存:如果我们需要多次对同一张图片进行处理,可以考虑使用缓存来避免重复加载和处理。

以上是关于SkiaSharp库在NetCore平台下进行跨平台图片操作的基础使用方法和性能方面的建议。通过SkiaSharp库,我们可以轻松地处理图片,并实现各种高级功能。希望本文对您有所帮助,如有任何疑问或需要进一步的帮助,请随时留言。


__EOF__

本文作者pccai
本文链接https://www.cnblogs.com/pccai/p/17858065.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   pccai  阅读(3649)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2010-11-26 如何在MOSS站点上启用Silverlight控件?
点击右上角即可分享
微信分享提示