Pertanyaan ASP.NET: Menambahkan 'Watermark' ke gambar dengan cepat


Saya telah melihat banyak pertanyaan dan jawaban yang bagus menambahkan tanda air pada gambar dengan php

Saya ingin melakukan hal yang sama, kali ini dengan ASP.NET

Jadi di sini ada beberapa pertanyaan.

  1. Bagaimana saya bisa melakukannya dengan ASP?
  2. Apakah proses ini akan menjadi kelebihan besar untuk server?
  3. Bisakah saya menggunakan gambar untuk watermark bukan teks sederhana?

4
2018-03-28 10:31


asal


Jawaban:


Ini satu contoh lagi http://www.codeproject.com/KB/web-image/ASPImaging1.aspx dari codeproject yang dapat Anda lakukan banyak berpikir pada gambar, termasuk menambahkan watermark dari gambar.

Saya pikir proses ini mengambil cpu power ether di php, ether di asp.net. Jadi skema cache gambar adalah suatu keharusan untuk jenis pekerjaan ini.

Berikut ini beberapa kode dasar. Dalam kode ini Anda harus mengubah posisi tanda air, dan ukuran gambar. Tanda air dapat berupa gambar png dengan tranparent.

    public void MakePhoto(...parametres...)
    {
        Bitmap outputImage = null;
        Graphics g = null;

        try
        {                
            // the final image
            outputImage = new Bitmap(OutWidth, OutHeight, PixelFormat.Format24bppRgb);

            g = Graphics.FromImage(outputImage);
            g.CompositingMode = CompositingMode.SourceCopy;
            Rectangle destRect = new Rectangle(0, 0, OutWidth, OutHeight);

            // the photo
            using (var BasicPhoto = new Bitmap(cBasicPhotoFileOnDisk))
            {
                g.DrawImage(BasicPhoto, destRect, 0, 0, BasicPhoto.Width, BasicPhoto.Height, GraphicsUnit.Pixel);
            }

            g.CompositingMode = CompositingMode.SourceOver;
            // the watermark
            using (var WaterMark = new Bitmap(cWaterMarkPhotoOnDisk))
            {
                Rectangle destWaterRect = new Rectangle(0, 0, OutWidth, OutHeight);

                g.DrawImage(WaterMark, destWaterRect, 0, 0, OutWidth, OutHeight, GraphicsUnit.Pixel);
            }

            outputImage.Save(TheFileNameTosaveIt, ImageFormat.Jpeg);

        }
        catch (Exception x)
        {
            Debug.Assert(false);
            ... log your error, and send an error image....                
        }
        finally
        {
            if (outputImage != null)
                outputImage.Dispose();

            if (g != null)
                g.Dispose();
        }
    }

Jika Anda ingin membuat custom menangani kode di atas adalah singkatan, tetapi Anda mengubah garis simpan saja. Sesuatu seperti.

public void ProcessRequest (HttpContext context)    
{
    context.Response.ContentType = "image/jpeg";

    // add you cache here
    context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(200));
    context.Response.Cache.SetMaxAge(new TimeSpan(0, 200, 0));
    context.Response.BufferOutput = false;


    ..... the above code....
    outputImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    ..... the above code....


    context.Response.End();
}

3
2018-03-28 10:56



Anda harus menggunakan HTTPModule seperti yang dijelaskan di Modul Watermarker ASP.NET artikel.


2
2018-03-28 10:45



Ya, Anda dapat melakukannya dengan menggunakan GDI +, menggunakan Kolor() pada Gambar, lalu menyimpannya atau mengembalikannya sebagai tanggapan.


1
2018-03-28 10:41



Di sebuah posting yang saya buat ada contoh pada watermarking teks pada gambar, menggunakan WPF bukan GDI + yang lama dan tidak lagi digunakan.

Seperti yang Anda lihat di artikel, teks ditambahkan dengan menggunakan metode DrawText dari DrawingContext, sangat mudah untuk menggunakan DrawImage, yang menerima BitmapImage.

Dengan sesuatu seperti:

BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.CacheOption = BitmapCacheOption.OnLoad;
logo.UriSource = new Uri(your_physical_logopath);
logo.EndInit();

Rect rect = new Rect(0, 0, (double)logo.PixelWidth, (double)logo.PixelHeight);

dc.DrawImage(logo, rect);

Dengan rect.X dan rect.Y, sebelum Anda mengeksekusi DrawImage (), Anda dapat memodifikasi posisi relatif dari gambar logo di dalam DrawingContext.


1
2018-03-28 10:51