Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 14691|Απάντηση: 0

[ASP.NET] Χρησιμοποιήστε το γενικό πρόγραμμα χειρισμού (IHttpHandler) για να δημιουργήσετε ένα καθολικό υδατογράφημα της εικόνας

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/9/2015 11:37:26 μ.μ. | | | |


Τα υδατογραφήματα έχουν σκοπό να μας εμποδίσουν να κλέψουμε τις εικόνες μας.

Δύο τρόποι για να επιτύχετε το εφέ υδατογραφήματος

1) Το υδατογράφημα μπορεί να προστεθεί όταν ο χρήστης ανεβάζει.

α) Οφέλη: Σε σύγκριση με τις 2 μεθόδους, ο διακομιστής στέλνει αυτήν την εικόνα απευθείας στον πελάτη κάθε φορά που ο χρήστης τη διαβάζει.

β) Μειονεκτήματα: Καταστρέφει την αρχική εικόνα.

2) Μέσω του παγκόσμιου προγράμματος γενικής επεξεργασίας, όταν ο χρήστης ζητήσει αυτήν την εικόνα, προσθέστε ένα υδατογράφημα.

α) Οφέλη: Η αρχική εικόνα δεν καταστρέφεται

β) Μειονεκτήματα: Οι χρήστες πρέπει να υδατογραφούν τις ζητούμενες εικόνες κάθε φορά που υποβάλλουν ένα αίτημα, γεγονός που σπαταλά τους πόρους του διακομιστή.
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Drawing;
  6. using System.IO;

  7. namespace Watermark
  8. {

  9.     /// <summary>
  10.     /// waterH 的摘要说明
  11.     /// </summary>
  12.     public class waterH : IHttpHandler
  13.     {
  14.         public waterH()
  15.         { }
  16.         private const string WATERMARK_URL = "~/Test/watermark.png";
  17.         private const string DEFAULTIMAGE_URL = "~/Test/watermark.png";
  18.         public void ProcessRequest(HttpContext context)
  19.         {
  20.             System.Drawing.Image Cover;
  21.             if (File.Exists(context.Request.PhysicalPath))
  22.             {
  23.                 Cover = Image.FromFile(context.Request.PhysicalPath);
  24.                 Image watermark = Image.FromFile(context.Request.MapPath(WATERMARK_URL));
  25.                 Graphics g = Graphics.FromImage(Cover);
  26.                 g.DrawImage(watermark, new Rectangle(Cover.Width - watermark.Width, Cover.Height - watermark.Height, watermark.Width, watermark.Height), 0, 0, watermark.Width, watermark.Height, GraphicsUnit.Pixel);
  27.                 g.Dispose();
  28.                 watermark.Dispose();
  29.             }
  30.             else
  31.             {
  32.                 Cover = Image.FromFile(context.Request.MapPath(DEFAULTIMAGE_URL));
  33.             }
  34.             context.Response.ContentType = "images/jpeg";
  35.             Cover.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  36.             Cover.Dispose();
  37.             context.Response.End();
  38.         }

  39.         public bool IsReusable
  40.         {
  41.             get
  42.             {
  43.                 return false;
  44.             }
  45.         }
  46.     }
  47. }
Αντιγραφή κώδικα
Ο κωδικός αρχείου για το waterH.ashx έχει ως εξής:

Στη συνέχεια, πρέπει να διαμορφώσετε τον ακόλουθο κόμβο στο web.config:

Κάτω από τον κόμβο system.web
    <httpHandlers>
      <add verb="*" path="Εικόνες/*.jpg" type="Watermark.waterH"/>
    </httpHandlers>

Στην αρχή, οι κόμβοι που διαμόρφωσα ήταν:
    <httpHandlers>
      <add verb="*" path="Εικόνες/*.jpg" type="waterH"/>
    </httpHandlers>

θα αναφέρει ένα σφάλμα,
Λανθασμένη διαμόρφωση

Περιγραφή: Παρουσιάστηκε σφάλμα κατά την επεξεργασία του προφίλ που απαιτείται για την παροχή υπηρεσιών στο αίτημα. Ελέγξτε τις συγκεκριμένες λεπτομέρειες σφάλματος παρακάτω και τροποποιήστε κατάλληλα το αρχείο διαμόρφωσης.

Μήνυμα σφάλματος αναλυτή: Αποτυχία φόρτωσης τύπου "waterH".

Σφάλμα πηγής:


Γραμμή 15: <system.web>
Γραμμή 16<httpHandlers>:
Γραμμή 17: <add verb="*" path="Images/*.jpg" type="waterH"/>
Γραμμή 18: </httpHandlers>
Γραμμή 19: <compilation debug="true" targetFramework="4.0" />




Τέλος,waterH με το όνομα του έργου!
Τέλος, επισυνάψτε ένα αντίγραφο του πηγαίου κώδικα: Watermark.rar (234.64 KB, Αριθμός λήψεων: 0, 售价: 2 粒MB)




Προηγούμενος:Το 360 Coolpad Zhou Hongyi και ο Jiang Chao σκίζουν ο ένας τον άλλον ή κάνουν διαφημιστική εκστρατεία;
Επόμενος:Ο ιστότοπος js κρέμεται από την ιδέα του αλόγου και η εξωτερική μεταφορά είναι j/c
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com