日期:2014-05-17  浏览次数:20365 次

将网站价格生成图片,求教思路。。
大家都知道,京东为了防止其他网站对其商品价格的抓取将商品的价格做成了图片。我们现在网站也想弄成这样的,就是将我们的商品的价格也弄成图片形式的。大家知道这种显示图片价格做法的思路是什么啊?
  我的想法是:编写一个生成价格图片的方法,将商品的价格通过加密方式发送到该方法,然后在方法中先将价格解密,然后将价格生成一个图片,然后返回一个<IMG>的HTML放到页面中,图片地址指向刚才生成的图片。
  现在如果我这样做的话会产生好多的图片,这样页面加载时会不会很慢啊?而且每当打开页面时每件商品中的价格都要去执行生成图片的方法。
  大家有没有比较好的方法啊?希望得到大家的指点,共同讨论一下。。。

------解决方案--------------------
文字生成图片
------解决方案--------------------
Refer:
http://www.cnblogs.com/insus/articles/1406122.html
------解决方案--------------------
后台添加价格时生成图片 图片名字用当时的时间字符串+随机数,就像上传图片带缩略图的那种 这样应该没有缓存的问题了
------解决方案--------------------
探讨

还是生成一张图片啊,产品的ID和图片的路径对应一起来啊,价格指向对应的图片就OK了

------解决方案--------------------
探讨

将1234567890写好,准备成一张图片。
客户端js根据价格数据,用css剪辑这张图片的一部分,从而显示出这些数字的组合,服务器端完全不需要开销。

------解决方案--------------------
楼主没必要这样做,如果需要获取贵公司的价格,哪怕你是图片,都可以解析出来,你又何必在乎这么多呢?
------解决方案--------------------
对于节约性能,我比较赞同1楼的方式。但是输出的内容如果有据可循,对特别针对性的爬虫会失去作用。所以需要考虑下实现思路上的混淆技巧。
------解决方案--------------------
验证码的思路去做就阔仪了。
------解决方案--------------------
楼主知道验证码怎么生成的吗,一样一样一样地,不知道的话搜搜验证码生成就行
------解决方案--------------------
探讨

看下验证码是怎么生成的,应该是同样的道理的,生成图片

------解决方案--------------------
探讨
引用:

GDI绘图,然后生成二进制的数据,Response.WriteBinary,不需要生成图片文件

我现在采用的是修改验证码生成的例子来做这个价格图片,做价格图片就是为了防止别的网站抓取到自己网站的价格,我现在用验证码的技术的话,要将价格参数传递给生成图片的页面,我采用的是用私钥加密的方式,给这个页面传递加密后的价格,然后在页面代码中解密字符串,然后生成图片放到页面……

------解决方案--------------------
个人觉得这个和验证码控件没什么分别啊,只是将验证码里的那些字母换成你的商品价格,不用随机生成,大概就是这个样子啊
------解决方案--------------------
C# code

 private void GetstringImg(string outstring, int with, int height, Color color)
    {
        Bitmap imgage = new Bitmap(with,height);
        Graphics g = Graphics.FromImage(imgage);
        Font font = new Font("宋体",12, FontStyle.Bold);
        SolidBrush brush = new SolidBrush(color);
        g.Clear(Color.White);
        StringFormat format = new StringFormat();
        g.DrawString(outstring, font, brush, 0,0,format);
        MemoryStream ms = new MemoryStream();
        imgage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

        content.Response.ClearContent();
        content.Response.ContentType = "image/pjpeg";
        content.Response.BinaryWrite(ms.ToArray());
        
                
    }
调用:
GetstringImg("189.00",30,10,Color.Red);