我正在尝试生成条形码图像。当我使用以下代码时,我可以创建一个base64字符串,但它给出了一个空白图像。我检查了内容不是空白或空白。
有代码正在使用,CoreCompat.System.Drawing但我无法使其工作,因为我在 OS X 环境中工作。
难道我做错了什么?
代码:
[HtmlTargetElement("barcode")]
public class BarcodeHelper: TagHelper {
public override void Process(TagHelperContext context, TagHelperOutput output) {
var content = context.AllAttributes["content"].Value.ToString();
var alt = context.AllAttributes["alt"].Value.ToString();
var width = 250;
var height = 250;
var margin = 0;
var barcodeWriter = new ZXing.BarcodeWriterPixelData {
Format = ZXing.BarcodeFormat.CODE_128,
Options = new QrCodeEncodingOptions {
Height = height, Width = width, Margin = margin
}
};
var pixelData = barcodeWriter.Write(content);
using (var image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, …Run Code Online (Sandbox Code Playgroud) 我有一个Web应用程序,用户可以在该Web应用程序上通过直接用手机拍摄照片来上传个人资料照片。由于图像的EXIF方向,前端必须在显示图片之前变换图像(旋转/翻转)。但是,我希望在保存图片之前在后端执行转换,以避免在前端进行转换。后端是用C#编写的.net core 2.0应用程序。
是否有人对可用于访问EXIF数据并进行转换的库提出建议。
到目前为止,我已经找到https://github.com/SixLabors/ImageSharp并浏览了有关如何使用它的文档。
c# image-processing asp.net-core asp.net-core-2.0 imagesharp
将 ImageSharp 用于 .Net 核心,如何并排组合 2 个图像?例如:使 2 100x150px 变成 1 100x300px(或 200x150px)
我的任务是创建要打印的图像。在图片上,我需要输入一个大写字母(大写[AZ])。
打印的图像尺寸可以在15厘米高和30厘米高之间变化(包括两者之间的任何尺寸)。
字母需要横跨打印图像的整个高度。
设置字体大小时,我看到您可以获取文本的大小。
using (Image<Rgba32> img = new Image<Rgba32>(imageWidth, imageHeight))
{
img.Mutate(x => x.Fill(Rgba32.White));
img.MetaData.HorizontalResolution = 96;
img.MetaData.VerticalResolution = 96;
var fo = SystemFonts.Find("Arial");
var font = new Font(fo, 1350, FontStyle.Regular);
Run Code Online (Sandbox Code Playgroud)
我可以在这里获取文本的大小:
SizeF size = TextMeasurer.Measure(group.Text, new RendererOptions(font));
Run Code Online (Sandbox Code Playgroud)
但是,如您所见,我在这里将字体的大小硬编码。高度需要与图像的高度匹配。
有什么方法可以指定这一点,而又不会增加质量?有没有一种方法可以指定高度(以像素为单位)?也许我可以安全使用的字体大小有颜色?
当我将“字体大小”设置为“图像”的像素高度时,会看到以下信息:

我不确定为什么圆圈部分有间隙。我将左手文本的左上角位置设置为0,0 ....,将“ QWW”组的右上角点设置为图像的宽度,将0设置为Y。但是我希望它们要与尺寸和底部齐平。
我正在尝试使用 SixLabors.Imagesharp 创建 Image 类的新实例,但出现错误。我使用的系统使用旧的 ImageSharp,我们想更新 nuget 包并使用 SixLabors.ImageSharp 代替。
代码曾经是这样的:OLD Code with ImageSharp:
var resultImage = new Image<Rgba32>(outputImageWidth, outputImageHeight);
Run Code Online (Sandbox Code Playgroud)
我尝试用 SixLabors.ImageSharp 编写的新代码完全相同,但这次我得到了按摩:
Severity Code Description Project File Linem Suppression State
Error CS0315 The type 'SixLabors.ImageSharp.PixelFormats.Rgba32' cannot be used as type parameter 'TPixel' in the generic type or method 'Image<TPixel>'. There is no boxing conversion from 'SixLabors.ImageSharp.PixelFormats.Rgba32' to '?'.
Run Code Online (Sandbox Code Playgroud)
我尝试了很多其他方法来创建新图像,但都失败了。您知道如何使用 SixLabors.Imagesharp 创建新图像吗?
我发现了一个 GitHub 问题,显示如何通过将其 ExifProfile 设置为 null 来删除图像的 exif 数据:
SixLabors.ImageSharp.Image image = Image.Load(imagePath);
//remove exif
image.Metadata.ExifProfile = null;
//resize
image.Mutate(x => x.Resize(width, height));
//save
SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder encoder = new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder();
encoder.Quality = 30;
image.Save(thumbnailPath, encoder);
Run Code Online (Sandbox Code Playgroud)
...但它似乎对我不起作用——保存的 jpeg 大小相同,当我的操作系统检查时,它们向我显示相机的所有 EXIF 设置。当我对从另一个实用程序创建的图像进行相同的检查时,操作系统不会向我显示所有 EXIF 设置......所以我倾向于说这种 ImageSharp 技术没有正确地擦除它们。
任何想法?
如何使用ImageSharp库将图像转换为字节数组?
ImageSharp库是否也可以根据EXIF方向建议/提供RotateMode和FlipMode?
我需要在不修改图像内容的情况下将唯一 ID 插入图像文件 - 即它只是我想要修改的元数据。我从 JPEG 文件开始,因为有一个合适的 EXIF 属性可用:ImageUniqueID。
我将 C# 与 .NET Core 3.1 一起用于ImageSharp 的这个练习。我可以使用以下代码使用 ImageSharp 更改 EXIF 数据(在没有现有记录检查的情况下显示简化等):
using (var image = Image.Load(filename))
{
var imageUniqueIdentifier = Guid.NewGuid().ToString().ToLower().Replace("-", "");
image.Metadata.ExifProfile.SetValue(ExifTag.ImageUniqueID, imageUniqueIdentifier);
var jpegEncoder = new JpegEncoder() { Quality = 100 };
image.Save(filename, jpegEncoder);
}
Run Code Online (Sandbox Code Playgroud)
我确实在 JpegEncoder 中使用了 Quality 设置,但仍然遇到了无法接受的质量下降或文件大小增加的问题。
有没有办法只读取元数据,更改它然后将其写回而根本不影响图像?
我还查看了MetadataExtractor.NET,但它没有写入功能,我很乐意查看其他 .NET Core 方法或库。
我一直在研究这个库,目的是用 C# 创建图像处理管道。我希望它能够接收 .png 图像并将其转换为 .jpeg。但我还没有找到使用这个库来做到这一点的方法。有可能吗?有人能够成功做到这一点吗?
这是我最好的镜头:
Image<Rgba32> image1 = SixLabors.ImageSharp.Image.Load<Rgba32>(fileName, out IImageFormat format);
var encd = new JpegEncoder
{
Quality = 80
};
image.Save(outputFinalPath, encd);
Run Code Online (Sandbox Code Playgroud)
结果是将图像简单地保存为 .png。我是处理图像的新手,所以我可能会遗漏一些东西。
我使用 SixLabors.ImageSharp 使用以下代码调整照片大小:
https://www.nuget.org/packages/SixLabors.ImageSharp/
ASP .NET Core 5.0
输入照片:720x960px
预期输出:248x186px
实际结果:186x248px
为什么宽度会变成高度,反之亦然?
using (var stream = new MemoryStream())
{
using var image = Image.Load(bytes);
image.Mutate(x => x
.Resize(new ResizeOptions
{
Mode = ResizeMode.Crop,
Position = AnchorPositionMode.Center,
Size = new Size(248, 186)
})
.BackgroundColor(Color.White));
await image.SaveAsync(stream, new JpegEncoder() { Quality = 85 });
}
Run Code Online (Sandbox Code Playgroud) imagesharp ×10
c# ×7
.net-core ×3
exif ×2
asp.net ×1
asp.net-core ×1
barcode ×1
image ×1
zxing.net ×1