1

当我按下保存按钮时,我只能以 JPEG 格式保存文本而不是图像。

html:

  <div id="painter" runat="server" style="left: 280px; position: absolute; top: 82px;
    width: 311px; height: 388px; background-color: #ccccff;">
    hi niladri
    <br />
    helo
    <br />
    dvshfgjfhglkglkhjlhkjmlkhklfhfg sasasasa
    <br />
    sssdsdsds


    <img src="image/1.jpg" alt="Osr" height="100" width="309" />
            </div>

<asp:Button ID="Save" runat="server" Style="left: 733px; position: absolute; top: 266px"
    Text="Button" OnClick="Save_Click" />

C#代码:

  public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Save_Click(object sender, EventArgs e)
{
          string[] value = painter.Style.Value.Split(';');
    string hw = painter.InnerHtml;
    hw = hw.Replace("<br />", Environment.NewLine);

    string width = value[3];
    string height = value[4];
    string bgcolor = value[5];

    string[] widthArray = width.Split(':');
    string[] heightArray = height.Split(':');
    string[] bgcolorArray = bgcolor.Split(':');

    int w = int.Parse(widthArray[1].Replace("px", ""));
    int h = int.Parse(heightArray[1].Replace("px", ""));

    string color = bgcolorArray[1];

    //var overlay = new Bitmap(imagePath2);

    System.Drawing.Color c = System.Drawing.Color.Cyan;//.FromName("#ccccff");

    System.Drawing.Bitmap bt = new System.Drawing.Bitmap(w, h);
    System.Drawing.Graphics oGraphics = System.Drawing.Graphics.FromImage(bt);
    System.Drawing.Brush brush = new System.Drawing.SolidBrush(c);
    oGraphics.FillRectangle(brush, 0, 0, w, h);
    oGraphics.DrawString(hw, new Font("Arial", 12, FontStyle.Italic), SystemBrushes.WindowText, new PointF(50, 50));

    bt.Save("E:\\image10.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);  

 }
 }

图片:

这里附上的jpeg图片,我们保存成jpeg格式时,只得到html图片来源信息,而不是原始图片。

4

3 回答 3

2

你好

使用这些代码:

protected void Save_Click(object sender, EventArgs e)
{
        string[] value = painter.Style.Value.Split(';');
        string hw = painter.InnerHtml;
        hw = hw.Replace("<br />", Environment.NewLine);

        string width = value[3];
        string height = value[4];
        string bgcolor = value[5];

        string[] widthArray = width.Split(':');
        string[] heightArray = height.Split(':');
        string[] bgcolorArray = bgcolor.Split(':');

        int w = int.Parse(widthArray[1].Replace("px", ""));
        int h = int.Parse(heightArray[1].Replace("px", ""));
        //=====================================================================
        //Added By RAM:
        string key = "src=";
        int start_of_img_address = hw.IndexOf(key) + key.Length+1;
        int end_of_img_address = hw.Substring(start_of_img_address + 1).IndexOf('"');
        string image_addres = hw.Substring(start_of_img_address, end_of_img_address+1);
        image_addres = Server.MapPath(image_addres);
        Image my_img = Image.FromFile(image_addres);

        key = "<img";
        int start_of_img_tag = hw.IndexOf(key);
        int end_of_img_tag = hw.Substring(start_of_img_tag).IndexOf('>')+1;
        string img_tag = hw.Substring(start_of_img_tag, end_of_img_tag+1);
        hw=hw.Remove(start_of_img_tag, end_of_img_tag);
        Response.Write(img_tag);

        //=====================================================================
        string color = bgcolorArray[1];

        //var overlay = new Bitmap(imagePath2);

        System.Drawing.Color c = System.Drawing.Color.Cyan; //.FromName("#ccccff");

        System.Drawing.Bitmap bt = new System.Drawing.Bitmap(w, h);
        System.Drawing.Graphics oGraphics = System.Drawing.Graphics.FromImage(bt);
        System.Drawing.Brush brush = new System.Drawing.SolidBrush(c);
        oGraphics.FillRectangle(brush, 0, 0, w, h);
        oGraphics.DrawString(hw, new Font("Arial", 12, FontStyle.Italic), SystemBrushes.WindowText, new PointF(0, 0)); //changed 50 to 0

        //=====================================================================
        //Added By RAM:
        oGraphics.DrawImage(my_img, 0, 170, my_img.Width, my_img.Height);
        //=====================================================================

        bt.Save("E:\\image10.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}

...和结果:

在此处输入图像描述

编辑:

您也可以使用正则表达式代替Substring、IndexOf和...

正则表达式 (RegEx) 帮助您获得:

  • 标签
  • 风格
  • 以及您想要从内容中获得的一切

所以,阅读正则表达式教程

您必须使用自己的计算来安排最终图像的内容。祝你好运...

于 2012-07-30T13:28:49.423 回答
0

您只获得 div 的 InnerHTML(只会获得文本),因此 IMG 标记将被忽略。如果要在 Web 源中指定图像的路径,可以使用服务器控件 (Image) 并从中获取图像路径。在后面的代码中加载图像并将其绘制到您的 Bitmap 对象,然后覆盖文本并保存。

int w = 640;
int h = 480;

System.Drawing.Color c = System.Drawing.Color.White;

string imagePath = Server.MapPath("~/image/1.jpg"); // here you would get the image source of your Image control
Image img = Image.FromFile(imagePath);

System.Drawing.Bitmap bt = new System.Drawing.Bitmap(w, h);
System.Drawing.Graphics oGraphics = System.Drawing.Graphics.FromImage(bt);
System.Drawing.Brush brush = new System.Drawing.SolidBrush(c);
oGraphics.FillRectangle(brush, 0, 0, w, h);
oGraphics.DrawImage(img, 0, 0, img.Width, img.Height);
oGraphics.DrawString("this is some text", new Font("Arial", 12, FontStyle.Italic), SystemBrushes.WindowText, new PointF(50, 50));

bt.Save("c:\\image10.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
于 2012-07-30T12:44:56.037 回答
0

在调用 DrawString 之前使用 Graphics.DrawImage。

Graphics.DrawImage(Image.FromFile(Server.MapPath("~/image/1.jpg")), 0, 0, w, h);

Graphics.DrawImage:http: //msdn.microsoft.com/en-us/library/dbsak4dc.aspx

于 2012-07-30T12:45:22.270 回答