夜的第七章

WEB开发个人博客。

« 貌似快年底了关于SQLSERVER数据库中时间23:59:59.999和2008-12-23: 0:00:00.000的比较 »

实现远程图片自动保存到本地并加上水印功能

ASP版本:
<!--r /> '函数功能:远程图片自动保存到本地服务器,并利用aspjpeg为图片加上水印
'(注意:请先在目录下创建images目录,用来保存临时图片)
'本程序需要在服务器上安装"aspjpeg组件"否则无法正常使用
'也可以只取'''''22222222'''''''以上的部分,这部分可以保存图片,第二部分是进行水印增加
'使用方法,请保存为saveimg.asp
'saveimg.asp?url=/XrssFile/2007-9/17/200791792858379.gif 即可以取下图片啦,HOHO. 其他需要加的功能,大家自己扩展好啦
'如何获取其他后缀名的文件呢? 当然也可以啦
'(jpg|gif|png|bmp)改成(mp3)明白吧? 就是取mp3后缀的文件名.以此类推. 嘻嘻
'俺要落伍. 发了二份原创,一份是惊云下载系统偷天空时防止出现连接来自天空软件站的程序,有需要的在落伍里面搜索我的贴子
'不要忘了使用时在目录下建images的保存目录哦

Server.ScriptTimeOut=99999

const savepath="images" '图片保存路径
url=request("url")

function myreplace(str)
newstr=str
set objregEx = new RegExp
objregEx.IgnoreCase = true
objregEx.Global = true
objregEx.Pattern = "http://(.+?)\.(jpg|gif|png|bmp)" '定义文件后缀
set matches = objregEx.execute(str)
for each match in matches
newstr=replace(newstr,match.value,saveimg(match.value))
next
myreplace=newstr
end function

function saveimg(url)
temp=split(url,".")
'以下是用时间与随机数重命名文件名
randomize
ranNum=int(90000*rnd)+10000
filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&temp(ubound(temp))
'文件名重命名结束
set xmlhttp=server.createobject("Microsoft.XMLHTTP")
xmlhttp.open "get",url,false
xmlhttp.send
img=xmlhttp.ResponseBody
set xmlhttp=nothing
set objAdostream=server.createobject("ADODB.Stream")
objAdostream.Open()
objAdostream.type=1
objAdostream.Write(img)
objAdostream.SaveToFile(server.mappath(savepath&filename))
objAdostream.SetEOS
set objAdostream=nothing
'''''''222222222'''''''''''
saveimg=savepath&filename '获取保存路径
Dim Jpeg
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open Server.MapPath(saveimg) '打开保存图片的路径

' 添加文字水印
Jpeg.Canvas.Font.Color = &HFF0000' 红色
Jpeg.Canvas.Font.Family = "宋体"
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Print Jpeg.OriginalWidth-200,Jpeg.OriginalHeight-50, "www.sina.com" '水印离左边的距离,离顶端的距离,这个是放在右下脚了
'保存文件
Jpeg.Save Server.MapPath(saveimg) '保存添加水印后的图片

' 注销对象
Set Jpeg = Nothing
end function
-->



ASP.NET(C#)版本:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

/// <summary>
/// SaveRemoteFile 的摘要说明
/// </summary>
public class SaveRemoteFile : Page
{
    public SaveRemoteFile()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //
    }

    public string Pic_Remote(string news_Content,DropDownList ddl)
    {
        string htmlStr = news_Content;
        string file = DateTime.Now.ToString("yyyyMM").Substring(0, 6);    //当前年月
        string day = DateTime.Now.ToString("dd"); //当天号数
        string path = "/WebSite/RemoteFile/" + file + "/" + day;
        Directory.CreateDirectory(Server.MapPath(path));
        string returnValue = "";
        returnValue = SaveUrlPics(htmlStr, path, file, day, ddl);
        return returnValue;
    }

    //下载图片到本地
    private string SaveUrlPics(string strHTML, string path, string nowyymm, string nowdd,DropDownList ddl)
    {
        string[] imgurlAry = GetImgTag(strHTML);
        try
        {
            for (int i = 0; i < imgurlAry.Length; i++)
            {
                //WebRequest req = WebRequest.Create(imgurlAry[i]);
                string fileName = DateTime.Now.ToString("yyyyMMddhhmmssfffff").Substring(0, 17);
                WebClient wc = new WebClient();
                if (imgurlAry[i] != "")
                {
                    wc.DownloadFile(imgurlAry[i], Server.MapPath(path) + "/" + fileName + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf(".")));
                    //替换原图片地址
                    string imgPath = "/WebSite/RemoteFile/" + nowyymm + "/" + nowdd;
                    ddl.Items.Add(imgPath + "/" + fileName + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf(".")));
                    strHTML = strHTML.Replace(imgurlAry[i], imgPath + "/" + fileName + imgurlAry[i].Substring(imgurlAry[i].LastIndexOf(".")));
                }
            }
        }
        catch
        {
            //return ex.Message;
        }
        return strHTML;
    }

    //获取图片标志
    public string[] GetImgTag(string htmlStr)
    {
        Regex regObj = new Regex("<img.+?>", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        string[] strAry = new string[regObj.Matches(htmlStr).Count];
        int i = 0;
        foreach (Match matchItem in regObj.Matches(htmlStr))
        {
            strAry[i] = GetImgUrl(matchItem.Value);
            i++;
        }
        return strAry;
    }

    //获取图片URL地址
    private string GetImgUrl(string imgTagStr)
    {
        string str = "";
        Regex regObj = new Regex("http://.+.(?:jpg|gif|bmp|png)", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        foreach (Match matchItem in regObj.Matches(imgTagStr))
        {
            str = matchItem.Value;
        }
        return str;
    }
}
 

asp.net(C#)版本2:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引入空间
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
/// &lt;summary&gt;
/// 采集
/// &lt;/summary&gt;
public class caiji
{
public caiji()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// &lt;summary&gt;
/// 要采集的网页的连接地址
/// &lt;/summary&gt;
/// &lt;param name=&quot;url&quot;&gt;url&lt;/param&gt;
/// &lt;returns&gt;&lt;/returns&gt;
public static string caijiByUrl(string url,string chargest,string path)
{
string str = GetSourceTextByUrl(url,chargest);
ArrayList lib = new ArrayList();
int i = 0;
//根据url取得网站域名
Uri uri = new Uri(url);
//Scheme或者协议,一般为http,Host为取得域名
string baseurl = uri.Scheme + &quot;://&quot; + uri.Host + &quot;/&quot;;
//提取出url,包括src等信息
//\S匹配任何非空白字符
Regex g = new Regex(@&quot;(src=(&quot;&quot;|\&#039;)\S+\.(gif|jpg|png|bmp)(&quot;&quot;|\&#039;))&quot;, RegexOptions.Multiline | RegexOptions.IgnoreCase);
MatchCollection m = g.Matches(str);
foreach (Match math in m)
{
//已经提取到图片的路径了,但还需要分绝对路径,相对路径,以及后缀名是否为图片,因为可能为.asp,.aspx这些,比如验证码图片
string imgUrl = math.Groups[0].Value.ToLower();//转成小写,=号之间可能有不定的空格
//去除src与单引号,双引号
imgUrl = imgUrl.Replace(&quot;src&quot;,&quot;&quot;);
imgUrl = imgUrl.Replace(&quot;\&quot;&quot;,&quot;&quot;);
imgUrl = imgUrl.Replace(&quot;&#039;&quot;,&quot;&quot;);
imgUrl = imgUrl.Replace(&quot;=&quot;,&quot;&quot;);
imgUrl = imgUrl.Trim();
//路径处理

if (imgUrl.Substring(0, 4) != &quot;http&quot;)
{
//需要判断是否是绝对路径还是相对路径
if (imgUrl.Substring(0, 1) == &quot;/&quot;)
{
imgUrl = baseurl + imgUrl;
}
else
{
imgUrl = url.Substring(0,url.LastIndexOf(&quot;/&quot;) + 1) + imgUrl;
}
}
//判断元素是否已经存在,-1为不存在
if (lib.IndexOf(imgUrl) == -1)
{
lib.Add(imgUrl);
}
}
string str_ = string.Empty;
WebClient client = new WebClient();
for (int j = 0; j &lt; lib.Count; j++)
{
string savepath = path + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Minute + DateTime.Now.Second + j + lib[j].ToString().Substring((lib[j].ToString().Length) -4,4);
try
{
client.DownloadFile(new Uri(lib[j].ToString()), savepath);
str_ += lib[j].ToString() + &quot;&lt;br /&gt; 保存路径为:&quot; + savepath + &quot;&lt;br /&gt;&lt;br /&gt;&quot;;
}
catch (Exception e)
{
str_ += e.Message;
}
}
return str_;
}
public static string GetSourceTextByUrl(string url,string chargest)
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 20000;//20秒超时
WebResponse response = request.GetResponse();
Stream resStream = response.GetResponseStream();
StreamReader sr = new StreamReader(resStream,Encoding.GetEncoding(chargest));
return sr.ReadToEnd();
}
}

 

使用:比如我是保存到upload文件夹中的:

string path = Server.MapPath(&quot;~/upload/&quot;);
Response.Write(caiji.caijiByUrl(http://www.zexue.com, &quot;utf-8&quot;, path));

 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。



[2007 - 2011] © Leadnt.com