我需要转换一些基于 System.Drawing 的代码以使用这个 .NET Core 兼容库:
https://github.com/SixLabors/ImageSharp
下面基于 System.Drawing 的代码调整图像大小并裁剪边缘,返回内存流然后保存。ImageSharp库可以做到这一点吗?
private static Stream Resize(Stream inStream, int newWidth, int newHeight)
{
var img = Image.Load(inStream);
if (newWidth != img.Width || newHeight != img.Height)
{
var ratioX = (double)newWidth / img.Width;
var ratioY = (double)newHeight / img.Height;
var ratio = Math.Max(ratioX, ratioY);
var width = (int)(img.Width * ratio);
var height = (int)(img.Height * ratio);
var newImage = new Bitmap(width, height);
Graphics.FromImage(newImage).DrawImage(img, 0, 0, width, height);
img = newImage;
if (img.Width != newWidth …Run Code Online (Sandbox Code Playgroud) 我PixelFormats.Bgra32从 UAP 和 WPF获取图像,我想知道将它们转换为 SixLabors.ImageSharpImage<Rgba32>图像的最快方法。在我使用 复制缓冲区后,是否有一些神奇的“变异”可以翻转像素字节TryGetSinglePixelSpan?
我无法在 c# 中使用 SixLabors.ImageSharp 版本 - 1.0.0-beta0007 保存 jpg 图像,它会引发错误。除了 GIF、PNG、JPEG、BMP 格式图像之外,还有其他解决方案可以解决此问题吗?
抛出异常:
无法加载图像。可用的解码器:
代码:
public string ResizeImage(byte[] imageBytes, int height, int width)
{
byte[] image = new byte[] { };
using (MemoryStream inStream = new MemoryStream(imageBytes))
{
using (MemoryStream outStream = new MemoryStream())
{
using (Image imageSharp = Image.Load(inStream))
{
imageSharp.Mutate(x => x.Resize(width, height));
imageSharp.SaveAsJpeg(outStream);
imageSharp.Dispose();
}
image = outStream.ToArray();
outStream.Flush();
inStream.Flush();
}
}
return Convert.ToBase64String(image);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ImageSharp.Web()库压缩图像(通常约为 5-30)质量/大小,但我真的不明白我该怎么做或我在这里缺少什么。
简单的代码示例:
private byte[] ConvertImageToByteArray(IFormFile inputImage)
{
byte[] result = null;
// filestream
using (var fileStream = inputImage.OpenReadStream()) // IFormFile inputImage
// memory stream
using (var memoryStream = new MemoryStream())
{
fileStream.CopyTo(memoryStream);
memoryStream.Position = 0; // The position needs to be reset.
var before = memoryStream.Length;
using (var item = Image.Load(memoryStream)) // do I need to use here JpegDecoder?
{
var beforeMutations = item.Size();
// dummy …Run Code Online (Sandbox Code Playgroud) 我有一些现有的 C# 代码,用于System.Drawing.Common测量字符串的近似宽度(以像素为单位):
var text = "abc123 this is some long text my dog's name is fido.";
using (var bitmap = new Bitmap(500, 50))
using (var graphics = Graphics.FromImage(bitmap))
{
// Size: 9 Points
using var font = new System.Drawing.Font(familyName: "Times New Roman", emSize: 9f);
var ms = graphics.MeasureString(text, font);
// Output: 'abc123 this is some long text my dog's name is fido.' via System.Drawing: 394.00195 x 22.183594
Console.WriteLine($"'{text}' via System.Drawing: {ms.Width} x {ms.Height}");
}
Run Code Online (Sandbox Code Playgroud)
升级到 后.NET …
ImageSharp我正在我的 .Net Core 2.2 项目中使用(ver 1.0.0-beta0006)。我主要用它来调整图像大小(以生成缩略图)并且它工作正常。
最近,我需要在图像上绘制矩形。根据文档,这就是我必须做的:
using (var image = new Image<Rgba32>(800, 800))
{
image.Mutate(x => x.DrawLines(
Rgba32.HotPink,
10,
new SixLabors.Primitives.PointF[] {
new Vector2(10, 10),
new Vector2(550, 50),
new Vector2(200, 400)
}));
using (var stream = new MemoryStream())
{
image.SaveAsBmp(stream);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我意识到在我的Mutatelambda 方法中没有名为 的方法DrawLines。我可以知道我是否错过了集会吗?根据文档,它是using:
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.PixelFormats;
Run Code Online (Sandbox Code Playgroud)
两者都可以在SixLabors.ImageSharp包装中找到。
如何使用SixLabors.ImageSharp获取图像格式?
在版本1.0.0-alpha9-00152中,我可以使用:
Image<Rgba32> image = Image.Load(GetBytesFromBlobStorage());
IImageFormat format = image.CurrentImageFormat;
Run Code Online (Sandbox Code Playgroud)
但是.CurrentImageFormat()没有看到能够在测试版1.0.0-beta0001.
我想知道图像是.png,.bmp还是.jpeg.
完全无法使用PdfSharpCore将JPEG图像渲染为PDF。
代码很简单
public byte[] GetPdfContent()
{
ImageSource.ImageSourceImpl = new ImageSharpImageSource();
var document = new PdfDocument();
var logo = XImage.FromFile("logo.jpg");
// this is test line, I'm saving XImage result and it is identical to the source file!
File.WriteAllBytes("logo1.jpg", logo.AsJpeg().ToArray());
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
gfx.DrawImage(logo, 0, 0);
using (var stream = new MemoryStream())
{
document.Save(stream, false);
return stream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道ImageSource.ImageSourceImpl必须进行设置,并且已经将其设置为ImageSharp基于最简单的实现:ImageSource.ImageSourceImpl = new ImageSharpImageSource()这确实有效,因为XImage被logo1.jpg正确保存。
但是我的PDF在视觉上是空白的。二进制内容在那里,似乎所有格式属性都可以,但是二进制数据与源有些不同。
这是我的ImageSharp实现保存/加载图像的方式:
public class ImageSharpImageSource : …Run Code Online (Sandbox Code Playgroud) 我需要在 .NET Core 中裁剪图像。我使用了 ImageSharp、CoreCompat 和 Microsoft.Windows.Compatibility,并扫描了我能找到的所有方法。但是,我仍然找不到裁剪图像的方法。可以调整大小,但不能裁剪。
如何根据左上角的像素位置、宽度和高度在 .NET Core 中裁剪图像?
我正在使用 ImageSharp 学习教程(https://opentk.net/learn/chapter1/4-textures.html)。如何将“ImageSharp.Image”类型转换为“ImageSharp.PixelFormats.Rgba32”?
要加载图像,我正在使用
Image<Rgba32> image = Image.Load(path);
但我不断收到错误消息:
Cannot implicitly convert type 'SixLabors.ImageSharp.Image' to 'SixLabors.ImageSharp.Image<SixLabors.ImageSharp.PixelFormats.Rgba32>'. An explicit conversion exists (are you missing a cast?).
imagesharp ×10
c# ×9
asp.net-core ×3
.net-core ×2
image ×2
.net-6.0 ×1
aws-lambda ×1
opentk ×1
pdfsharp ×1
rgba ×1
skiasharp ×1