首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

关于大量文字生成图片的有关问题,分不够再加,顶也有分啊

2012-02-01 
关于大量文字生成图片的问题,分不够再加,顶也有分啊~~最近搞了个小说网站www.zxnovel.cn在做VIP章节部分的

关于大量文字生成图片的问题,分不够再加,顶也有分啊~~
最近搞了个小说网站www.zxnovel.cn
在做VIP章节部分的时候,遇到一个问题,由于VIP章节要用图片来显示   ,我就想用生成验证码图片的方法   来生成章节图片。用的代码如下:
                Bitmap   Img   =   null;
                Graphics   g   =   null;
                MemoryStream   ms   =   null;

                Img   =   new   Bitmap(900,   2500);
                g   =   Graphics.FromImage(Img);//从Img对象生成新的Graphics对象  

                g.Clear(Color.Wheat);
                Font   f   =   new   Font( "Arial   Black ",   10);//生成Font类的实例  
                SolidBrush   s   =   new   SolidBrush(Color.DodgerBlue);//生成笔刷类的实例  
                StringFormat   sf   =   new   StringFormat();
                sf.FormatFlags   =   StringFormatFlags.NoWrap;
                g.DrawString(content,   f,   s,   0,   0,   sf);//将VNum写入图片中  
                ms   =   new   MemoryStream();//生成内存流对象  
                Img.Save(ms,   ImageFormat.Gif);//将此图像以Png图像文件的格式保存到流中  
                Response.ClearContent();//更改http   ContentType  
                Response.ContentType   =   "image/Gif ";
                Response.BinaryWrite(ms.ToArray());//将整个二进制流的内容写入字节数组  
                //回收资源  
                g.Dispose();
                Img.Dispose();
                Response.End();

现在遇到的问题如下:
1、遇到大量文本时,不知道该实例化多少大小的Bitmap实例:Img   =   new   Bitmap(900,   2500);
2、生成的图片中,文本不会自动折行,只有遇到\r\n标记时才会换行。
3、不知道怎么加上版权信息的水印。
4、如果想把图片生成为透明背景的样式,该   怎么实现。

注:现在小说网站中都是转载的小说,如果不小心触犯了哪位大大的版权,请在网站留言告之,我会删除的。没人气,所以只能借人气了,还请见谅。

[解决办法]
ding
[解决办法]
没有弄过,关注一下,期待高手来
[解决办法]
up
[解决办法]
我来回答第2点

RectangleF rf = new RectangleF(0, 0, 900, 2500);
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.EllipsisCharacter;
g.DrawString(content, f, s, rf, sf);//将VNum写入图片中
[解决办法]
解决上面的四个问题,就不要用生成验证码的方式生成图片,关于图片水印你网上找一下有的。
[解决办法]
ding
[解决办法]
顶!!!

------解决方案--------------------


帮顶.
[解决办法]
你可以用先计算文字的高度和宽度,将高与宽放入一个全局变量里
[解决办法]
我这里有个生成条形码的程序,可以参考一下思路
public Boolean saveFile(string Code,string Title,int UseCheck)
{
string code39 = Encode39(Code,UseCheck);
if(code39 != null)
{
Bitmap saved = new Bitmap(this.Width,this.Height);
Graphics g = Graphics.FromImage(saved);
g.FillRectangle(new SolidBrush(Color.White),0,0,this.Width,this.Height);
this.DrawBarCode39(code39,Title,g);
string path = ConfigurationSettings.AppSettings[ "ImagePath "];
string filename = path + Code + ".jpg ";
saved.Save(filename,ImageFormat.Jpeg);
saved.Dispose();
return true;
}
return false;
}
/***
* Code:未经编码的字符串
*
* **/
private string Encode39(string Code,int UseCheck)
{
int UseStand = 1; //检查输入待编码字符是否为标准格式(是否以*开始结束)

//保存备份数据
string OriginalCode=Code;

//为空不进行编码
if(null==Code||Code.Trim().Equals( " "))
{
return null;
}
//检查错误字符
Code = Code.ToUpper(); //转为大写
Regex rule = new Regex(@ "[^0-9A-Z%$\-*] ");
if(rule.IsMatch(Code))
{
MsgBox.Alert( "编码中包含非法字符,目前仅支持字母,数字及%$-*符号!! ");
return null;
}
//计算检查码
if (UseCheck==1)
{
int Check = 0;
//累计求和
for (int i = 0; i < Code.Length; i++)
{
Check += int.Parse((string)CheckCode[Code.Substring(i,1)]);
}
//取模
Check=Check%43;
//附加检测码
foreach(DictionaryEntry de in CheckCode)
{
if((string)de.Value==Check.ToString())
{
Code=Code+(string)de.Key;
break;
}
}
}
//标准化输入字符,增加起始标记
if (UseStand==1)
{
if (Code.Substring(0,1) != "* ")
{
Code = "* " + Code;
}
if (Code.Substring(Code.Length-1,1)!= "* ")
{
Code = Code + "* ";
}
}
//转换成39编码
string Code39= " ";
for (int i = 0; i < Code.Length; i++)
{
Code39=Code39+(string)Decode[Code.Substring(i,1)]+SPARATOR;
}

int height = 30+LineHeight;//定义图片高度
int width=xCoordinate;
for(int i=0;i <Code39.Length;i++)
{
if( "0 ".Equals(Code39.Substring(i,1)))
{
width+=WidthXI;
}
else
{
width+=WidthCU;
}
}
this.Width=width+xCoordinate;
this.Height=height;

return Code39;
}
[解决办法]
還不會...mark....
高手過來....
[解决办法]
通过计算一个字的长和宽,计算出一行字的个数。通过上述方式控制换行
[解决办法]
@tomsonyang(甲壳虫)
你的方法,明显不可取,这样显示,会超慢。用我的那个方法就没有问题的。
[解决办法]
比如你设置字体和大小后,计算一行的宽度,和高度,最后统计一下多少行就可以得出总高度
[解决办法]
up

[解决办法]
顶,请高手来看看

------解决方案--------------------


图片大小根据文字大小来估算,12px文字,高宽都是12px,由此可以计算宽度,并得出多少个字的时候应该换行。
至于图片水印效果之类,实际就是先生成一个背景图,再在背景图上打出文字。看看.net图像处理那些类,不难的。
[解决办法]
不会
帮顶
[解决办法]
关注
[解决办法]
1、遇到大量文本时,不知道该实例化多少大小的Bitmap实例:Img = new Bitmap(900, 2500);
2、生成的图片中,文本不会自动折行,只有遇到\r\n标记时才会换行。
3、不知道怎么加上版权信息的水印。
4、如果想把图片生成为透明背景的样式,该 怎么实现。
===============================
第一个可以用一个int来控制,当不够时增加这个int就可以了
第二定义每个字的高宽,页高宽就可以大概知道了
第三水印就是利用画刷做的,BAIDU
想把图片生成透明:http://www.cnblogs.com/kobe09/articles/344048.html
[解决办法]
up
[解决办法]
UP
[解决办法]
up
[解决办法]
UP。。。。。。。。
[解决办法]
帮楼主顶了
[解决办法]
不会
帮顶
[解决办法]
帮顶
[解决办法]
up
[解决办法]
Bitmap image = new Bitmap(50, 20);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);

[解决办法]
不知道上冇这一段代码对LZ有用没有??
[解决办法]
ding
[解决办法]
up
[解决办法]
只知道怎么往图片里写字,不过不清楚性能.留意
[解决办法]
建议定死宽度,用计算字数的方法,控制行数,用行数确定图片的长度
[解决办法]
DING!
[解决办法]
只有接分了
[解决办法]
学习
[解决办法]
Mark

个人觉得
做好背景图片后再在上面写文字会好点
[解决办法]
我来顶一下
[解决办法]
byte[] bytes = Encoding.UTF8.GetBytes( "小说字 ");
int len = bytes.length * 字大小的宽度这个自己找

然后循环如果大于多少就换一行
[解决办法]
DING
[解决办法]
来接分,顶上去
[解决办法]
服务器耗资源,而浏览器这边,下载这样大一个图片也比文字需要更久的时间,不知道楼主这样主要是为了解决什么问题?为了防止复制文章??
[解决办法]
最简单的做法,对于原创文章加版权说明,若真是有人侵权,就打个官司,甭管输赢,乘机对网站炒作一番:)
至于非原创文章,就算你这里不能下载,其他地方照样下,更没必要搞这些明堂。

另外,就算是图片方式,现在也有n多软件可以识别里面的文字,这也是验证码为什么会加复杂背景并扭曲文字的原因,你不至于把整篇文章都搞成这模样嘛,而且就算这样有些牛人也能破解,所以无太大意义。


[解决办法]
up

热点排行