0%

C#一些常用的图片操作方法:生成文字图片 合并图片等 - 晓晨Master - 博客园

Excerpt

生成文字图片: 合并图片: MemoryStream保存到图片


生成文字图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>
<span> 2</span> <span>///</span><span> 生成文字图片
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="text"&gt;&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;param name="isBold"&gt;&lt;/param&gt;</span>
<span> 6</span> <span>///</span> <span>&lt;param name="fontSize"&gt;&lt;/param&gt;</span>
<span> 7</span> <span>public</span> Image CreateImage(<span>string</span> text, <span>bool</span> isBold, <span>int</span><span> fontSize)
</span><span> 8</span> <span> {
</span><span> 9</span> <span>int</span> wid = <span>400</span><span>;
</span><span>10</span> <span>int</span> high = <span>200</span><span>;
</span><span>11</span> <span> Font font;
</span><span>12</span> <span>if</span><span> (isBold)
</span><span>13</span> <span> {
</span><span>14</span> font = <span>new</span> Font(<span>"</span><span>Arial</span><span>"</span><span>, fontSize, FontStyle.Bold);
</span><span>15</span>
<span>16</span> <span> }
</span><span>17</span> <span>else</span>
<span>18</span> <span> {
</span><span>19</span> font = <span>new</span> Font(<span>"</span><span>Arial</span><span>"</span><span>, fontSize, FontStyle.Regular);
</span><span>20</span>
<span>21</span> <span> }
</span><span>22</span> <span>//</span><span>绘笔颜色</span>
<span>23</span> SolidBrush brush = <span>new</span><span> SolidBrush(Color.Black);
</span><span>24</span> StringFormat format = <span>new</span><span> StringFormat(StringFormatFlags.NoClip);
</span><span>25</span> Bitmap image = <span>new</span><span> Bitmap(wid, high);
</span><span>26</span> Graphics g =<span> Graphics.FromImage(image);
</span><span>27</span> SizeF sizef = g.MeasureString(text, font, PointF.Empty, format);<span>//</span><span>得到文本的宽高</span>
<span>28</span> <span>int</span> width = (<span>int</span>)(sizef.Width + <span>1</span><span>);
</span><span>29</span> <span>int</span> height = (<span>int</span>)(sizef.Height + <span>1</span><span>);
</span><span>30</span> <span> image.Dispose();
</span><span>31</span> image = <span>new</span><span> Bitmap(width, height);
</span><span>32</span> g =<span> Graphics.FromImage(image);
</span><span>33</span> g.Clear(Color.White);<span>//</span><span>透明</span>
<span>34</span>
<span>35</span> RectangleF rect = <span>new</span> RectangleF(<span>0</span>, <span>0</span><span>, width, height);
</span><span>36</span> <span>//</span><span>绘制图片</span>
<span>37</span> <span> g.DrawString(text, font, brush, rect);
</span><span>38</span> <span>//</span><span>释放对象</span>
<span>39</span> <span> g.Dispose();
</span><span>40</span> <span>return</span><span> image;
</span><span>41</span> }

合并图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>  
<span> 2</span> <span>///</span><span> 合并图片
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="imgBack"&gt;&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;param name="img"&gt;&lt;/param&gt;</span>
<span> 6</span> <span>///</span> <span>&lt;returns&gt;&lt;/returns&gt;</span>
<span> 7</span> <span>public</span> <span>static</span> Bitmap CombinImage(Image imgBack, Image img, <span>int</span> xDeviation = <span>0</span>, <span>int</span> yDeviation = <span>0</span><span>)
</span><span> 8</span> <span> {
</span><span> 9</span>
<span>10</span> Bitmap bmp = <span>new</span> Bitmap(imgBack.Width, imgBack.Height +<span> img.Height);
</span><span>11</span>
<span>12</span> Graphics g =<span> Graphics.FromImage(bmp);
</span><span>13</span> <span> g.Clear(Color.White);
</span><span>14</span> g.DrawImage(imgBack, <span>0</span>, <span>0</span>, imgBack.Width, imgBack.Height); <span>//</span><span>g.DrawImage(imgBack, 0, 0, 相框宽, 相框高);
</span><span>15</span>
<span>16</span> <span>//</span><span>g.FillRectangle(System.Drawing.Brushes.White, imgBack.Width / 2 - img.Width / 2 - 1, imgBack.Width / 2 - img.Width / 2 - 1,1,1);</span><span>//</span><span>相片四周刷一层黑色边框
</span><span>17</span>
<span>18</span> <span>//</span><span>g.DrawImage(img, 照片与相框的左边距, 照片与相框的上边距, 照片宽, 照片高); </span>
<span>19</span>
<span>20</span> g.DrawImage(img, imgBack.Width / <span>2</span> - img.Width / <span>2</span> + xDeviation, imgBack.Height +<span> yDeviation, img.Width, img.Height);
</span><span>21</span> <span> GC.Collect();
</span><span>22</span> <span>return</span><span> bmp;
</span><span>23</span> }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<span> 1</span>         <span>///</span> <span>&lt;summary&gt;</span>  
<span> 2</span> <span>///</span><span> Resize图片
</span><span> 3</span> <span>///</span> <span>&lt;/summary&gt;</span>
<span> 4</span> <span>///</span> <span>&lt;param name="bmp"&gt;</span><span>原始Bitmap</span><span>&lt;/param&gt;</span>
<span> 5</span> <span>///</span> <span>&lt;param name="newW"&gt;</span><span>新的宽度</span><span>&lt;/param&gt;</span>
<span> 6</span> <span>///</span> <span>&lt;param name="newH"&gt;</span><span>新的高度</span><span>&lt;/param&gt;</span>
<span> 7</span> <span>///</span> <span>&lt;param name="mode"&gt;</span><span>保留着,暂时未用</span><span>&lt;/param&gt;</span>
<span> 8</span> <span>///</span> <span>&lt;returns&gt;</span><span>处理以后的图片</span><span>&lt;/returns&gt;</span>
<span> 9</span> <span>public</span> <span>static</span> Image ResizeImage(Image bmp, <span>int</span> newW, <span>int</span> newH, <span>int</span><span> mode)
</span><span>10</span> <span> {
</span><span>11</span> <span>try</span>
<span>12</span> <span> {
</span><span>13</span> Image b = <span>new</span><span> Bitmap(newW, newH);
</span><span>14</span> Graphics g =<span> Graphics.FromImage(b);
</span><span>15</span>
<span>16</span> <span>//</span><span> 插值算法的质量 </span>
<span>17</span> g.InterpolationMode =<span> InterpolationMode.HighQualityBicubic;
</span><span>18</span> g.DrawImage(bmp, <span>new</span> Rectangle(<span>0</span>, <span>0</span>, newW, newH), <span>new</span> Rectangle(<span>0</span>, <span>0</span><span>, bmp.Width, bmp.Height),
</span><span>19</span> <span> GraphicsUnit.Pixel);
</span><span>20</span> <span> g.Dispose();
</span><span>21</span> <span>return</span><span> b;
</span><span>22</span> <span> }
</span><span>23</span> <span>catch</span>
<span>24</span> <span> {
</span><span>25</span> <span>return</span> <span>null</span><span>;
</span><span>26</span> <span> }
</span><span>27</span> }

MemoryStream保存到图片

1
2
3
<span>1</span>         Bitmap bmp =<span> CombinImage(ms, img1);
</span><span>2</span> MemoryStream ms = <span>new</span><span> MemoryStream();
</span><span>3</span> bmp.Save(ms, ImageFormat.Png);