如何将图像裁剪为圆形?

2023-11-29

我正在尝试将图像裁剪为圆形,其中圆形之外的区域是白色的。

新的图像尺寸将与原始图像尺寸相同,只是有效地舍入图像。

我熟悉如何使用 GDI+ 裁剪图像,通过获取现有图像并将其复制到新图像中来绘制矩形/正方形,但我不知道如何用白色填充圆弧/圆形的外部。

这可能吗?

更新 - 我想在服务器端进行,因为不同的浏览器/平台以不同的方式呈现CSS半径,或者根本不呈现

到目前为止我的工作是:

public static Image CropCircle2(Image imgSource)
    {
        Image imgTarget = new Bitmap(imgSource.Width, imgSource.Height);
        Graphics g = Graphics.FromImage(imgTarget);
        var path = new System.Drawing.Drawing2D.GraphicsPath();
        path.AddEllipse(0, 0, imgTarget.Width, imgTarget.Height);
        g.SetClip(path);
        g.DrawImage(imgSource, 0, 0);

        return imgTarget;
    }

您需要先将背景绘制为您想要的颜色:

public static Image CropToCircle(Image srcImage, Color backGround)
{
    Image dstImage = new Bitmap(srcImage.Width, srcImage.Height, srcImage.PixelFormat);
    Graphics g = Graphics.FromImage(dstImage);
    using (Brush br = new SolidBrush(backGround)) {
        g.FillRectangle(br, 0, 0, dstImage.Width, dstImage.Height);
    }
    GraphicsPath path = new GraphicsPath();
    path.AddEllipse(0, 0, dstImage.Width, dstImage.Height);
    g.SetClip(path);
    g.DrawImage(srcImage, 0, 0);

    return dstImage;
}

测试代码:

Image srcImage = Bitmap.FromFile(@"..\..\080.jpg");
Image dstImage = CropToCircle(srcImage, Color.CadetBlue);
dstImage.Save(@"..\..\080cropped.jpg", ImageFormat.Jpeg);

Input: enter image description here

Output: enter image description here

如果您希望图像的外部是透明的,那么您需要将像素格式设置为带有 Alpha 通道的像素格式(而不是 srcImage 的像素格式),并使用包含全透明 Alpha 的背景颜色。保存时,请确保使用支持 alpha 的文件格式(例如 png)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将图像裁剪为圆形? 的相关文章

  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 当下拉列表内部触发选定索引更改事件时,引导模式关闭

    我在 Bootstrap 模式中有一个 ASP NET 图表 一切都工作正常 直到我在里面添加了一个下拉列表 每次我在下拉列表中选择一个新项目时 所选项目更改事件都会触发 并且如果事件内没有代码 则 Boostrap 模式会关闭 这是模式引
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 单击 form2 上的按钮触发 form 1 中的方法

    我对 Windows 窗体很陌生 我想知道是否可以通过单击表单 2 中的按钮来触发表单 1 中的方法 我的表格 1 有一个组合框 我的 Form 2 有一个 保存 按钮 我想要实现的是 当用户单击表单 2 中的 保存 时 我需要检查表单 1
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 无需安装即可部署 Expression Encoder SDK

    我试图在使用 Microsoft Expression Encoder 3 SDK 时证明一个概念 我正在尝试将 SDK 部署到我的托管 Web 服务器 以了解更多关于它是否有效以及还需要安装什么的信息 我无法在服务器上进行任何操作 以下是
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如果方法参数是 string 或 int,ASP.NET WebAPI 会抛出 404

    我对 ASP NET MVC4 WebAPI 做了一个非常简单的测试 发现了一些有趣的问题 当一个方法采用复杂类型时 它会起作用 但是当它采用 string 或 int 时 它将抛出 404 如给出的屏幕截图所示 AddProduct 可以

随机推荐

  • IP 地址“::1”是什么?

    我正在没有网络连接的本地计算机上使用套接字 见下文 IPAddress address IPAddress Any doesn t work IPAddress address IPAddress Parse 1 works 那么到底是什么
  • 根据购物车总金额的百分比支付押金

    我从另一篇文章中获取了这段代码 基本上根据我的理解 这段代码试图强制购物车价格更改为 40 美元的固定金额 并将其作为预订费收取 我想要做的是强制购物车金额为购物车中所有产品总和的 20 我的网站是为了预订 所以我只想收取押金然后让他们在使
  • Woocommerce 3 中的自定义结账字段和运输方式 ajax 交互

    这个问题很快就会让我去邮寄 在 Woocommerce Checkout 中 我需要在地址中添加自定义字段 这个额外的字段用于function calculate shipping package array 现在显然 woocommerc
  • IOS - 无法以编程方式打开 Whatsapp 聊天,但可以通过 HTML 来打开

    我有一个网页 其锚点包含 href whatsapp xxxxxxxxx 如果我在 iPhone iOS 9 上单击它 它会在该联系人的聊天视图中打开 WhatsApp 我可以看到所有我与联系人进行的聊天 但是 如果我以编程方式执行此操作
  • RewriteRule - html 损坏 - 就像缺少 css

    我对这个规则有疑问 RewriteRule d more php books 1 tags 2 L 执行此规则后 一切正常 但页面显示不正确 就像缺少CSS一样 提前致谢 当您有 CSS 文件的相对 URL 时 可能会发生这种情况 如果您访
  • C++ ifstream从linux到arduino

    原始代码 include
  • 如何在 txt 文件中写入,iOS 7

    我正在尝试为 iOS 7 制作一个 iPhone 应用程序 我在我的项目中创建了一个txt文件 并且希望能够从txt文件中写入文本 当我按下写入按钮时 写入并能够读取数据 当我按下读取按钮时 读 当我尝试读取数据时 我发现这种方法有效 IB
  • 尽管传递了参数列表,为什么将变量传递给 subprocess.Popen 不起作用?

    我有一个脚本调用另一个Python脚本subprocess Popen 但是因为我有参数存储在变量中 servers server address servers server port servers server pass 我无法执行该
  • 异步.NET控制台程序中的线程控制流[重复]

    这个问题在这里已经有答案了 我在 C 中摆弄 async await 只是为了深入研究一些线程控制流 并偶然发现了一个不寻常的行为 我非常感谢对此的澄清 即使任务本身在后台执行 await 之后的执行也会在调用线程上继续 这是有意义的 事实
  • 自定义 Firebase 用户身份不使用 Firebase 用户 uid

    我正在玩FirebaseUI Android并有一个关于在唯一标识用户时使用什么 ID 的问题 FirebaseUI 管理身份验证权限并返回IdpResponse目的 这可以是例如Facebook Twitter 电话等等 非常感谢背后的每
  • 使用 ArrayAdapter 在 listView 中添加标题

    我正在尝试使用数组适配器显示列表视图 我从数据库中获取数组 ArrayAdapter
  • 如何偏移元素的第 n 个子元素

    我正在尝试提取元素的第 n 个子元素 以便元素显示堆叠在同一个容器中 我试过读一遍https developer mozilla org en US docs Web CSS nth child 但无济于事 我在 jsfiddle 中重现了
  • 散景叠加 GridPlot 中的多个绘图对象

    假设我有一个类 它保存一些数据并实现一个返回散景图的函数 import bokeh plotting as bk class Data def plot self kwargs do something to retrieve data r
  • 不使用 numpy 搜索二维列表

    我正在定义一个接受两个参数的函数 int and a list 如果该函数在列表中找到该整数 则返回其值坐标 例如 我该如何处理以下列表中的数字 4 不使用numpy l 0 0 0 0 0 0 0 0 0 0 2 1 1 0 1 1 1
  • 是否可以在 css 中创建 2 轴 4 颜色渐变(双线性渐变)?

    我的 JavaScript 示例和
  • 定时器(System.Threading)线程安全

    有谁知道这段代码是否是线程安全的 或者我在调用timer2 Change时是否必须使用锁 Timer timer1 new Timer timerCallback1 Timer timer2 new Timer timerCallback2
  • “错误:并非所有代码路径都会返回值。”

    我的代码在编译时抛出名义异常 我不明白为什么会发生这种情况 因为经过广泛搜索后 发生错误的原因似乎只有在没有退出返回语句的情况下才存在 但我认为我的代码是完全包容的 bool CheckExisting Account loginAcc n
  • 制作 Python 扇形图/扇形图

    我正在寻找用Python制作一个扇形图类型的线图 它类似于英格兰银行利率扇形图像这个 我非常擅长使用 matplotlib 来绘制标准线 条形图 散点图 但这似乎需要一些更自定义的实现 我在 Google 上搜索过 但似乎找不到任何执行此类
  • Google ARCore 域模型示例

    我正在尝试阅读并理解 Google ARCore 的域模型 特别是安卓软件开发工具包包 目前该SDK位于 preview 模式 因此没有任何教程 博客 文章等可以帮助您了解如何使用该 API 甚至 Google 本身也建议仅阅读源代码 源代
  • 如何将图像裁剪为圆形?

    我正在尝试将图像裁剪为圆形 其中圆形之外的区域是白色的 新的图像尺寸将与原始图像尺寸相同 只是有效地舍入图像 我熟悉如何使用 GDI 裁剪图像 通过获取现有图像并将其复制到新图像中来绘制矩形 正方形 但我不知道如何用白色填充圆弧 圆形的外部