Blog alskare

.Net y lo que surja

Archivo de 26 agosto 2009

Escribir texto en una fotografía

Publicado por alskare en 26/08/2009

En más de una ocasión he tenido la necesidad de añadir algún texto dentro de una fotografía, bien sea como marca de agua para subir las fotos a un servidor o, sencillamente, para incluir algún tipo de información en la misma fotografía.

Siempre había realizado esta acción en VisualBasic, pero en esta ocasión he tenido que hacerlo en C# así que, siguiendo la costumbre, dejo aquí el trabajo. Tal como está la clase en estos momentos, reconozco que está muy verde, puesto que, sin problemas, pueden añadirse multitud de servicios que la harían mucho más funcional, pero deja bien asentadas las bases de la escritura de un texto dentro de la foto.

 

using System.Drawing;

namespace jnSoftware.Utiles.Fotos
{

    public class Foto
    {
        #region Campos 
        private Bitmap _foto = null;
        private int _posicion_izquierda = 2;
        private int _posicion_arriba = 2;
        private Brush _pincel = Brushes.White;
        private int _tamanoFuente = 100;
        private string _nombreFuente = "Tahoma";
        #endregion 


        #region Propiedades

        /// <summary>
        /// Obtiene o establece el pincel (color del texto)
        /// </summary>
        public Brush Pincel
        {
            get { return _pincel; }
            set { _pincel = value; }
        }
    

        /// <summary>
        /// Obtiene o establece el tamaño de letra
        /// </summary>
        public int Tamano
        {
            get { return _tamanoFuente; }
            set { _tamanoFuente = value; }
        }


        /// <summary>
        /// Obtiene o establece la distancia existente entre el borde izquierdo de la 
        /// foto y el principio del texto
        /// </summary>
        public int PosicionIzquierda
        {
            get { return _posicion_izquierda; }
            set { _posicion_izquierda = value; }
        }


        /// <summary>
        /// Obtiene o establece la distancia existente entre el borde superior de la 
        /// foto y el principio del texto
        /// </summary>
        public int PosicionArriba
        {
            get { return _posicion_arriba; }
            set { _posicion_arriba = value; }
        }

        #endregion


        #region Constructores
        /// <summary>
        /// Constructor - Instancia la clase con una nueva fotografía
        /// </summary>
        /// <param name="foto">Fotografía a retocar</param>
        public Foto(Bitmap foto)
        {
            _foto = foto;
        }

        /// <summary>
        /// Constructor - Instancia la clase con un fichero 
        /// </summary>
        /// <param name="foto">Ruta completa del fichero gráfico a retocar</param>
        public Foto(string foto)
        {
            _foto = new Bitmap(foto);
        }
        #endregion 




        /// <summary>
        /// Obtiene la foto con las modificaciones 
        /// </summary>
        /// <returns></returns>
        public Bitmap GetFoto()
        {
            return _foto ;
        }



        /// <summary>
        /// Escritura de la cadena de texto sobre la foto.
        /// </summary>
        /// <param name="cadena"></param>
        public void EscribeTexto(string cadena)
        {
            // La clase Graphics encapsula una superficie de dibujo de GDI+. 
            Graphics g = Graphics.FromImage(_foto);
            // Se crea un PointF para posicionar el texto
            PointF posicion = new PointF( _posicion_izquierda, _posicion_arriba);
            // Fuente
            Font fuente = new Font(_nombreFuente, _tamanoFuente);
            // Se escribe la cadena de texto en la fotografía
            g.DrawString(cadena, fuente, _pincel, posicion);
        }


    }
}

Publicado en C#, Helpers, NetFramework | Comentarios desactivados

Enviar correo electrónico desde ASP.NET

Publicado por alskare en 19/08/2009

Ya sé que es un tema repetido hasta la saciedad, pero en este caso, incluyo el código de un modo egoísta, así, cuando necesite crear de nuevo un elemento que permita enviar correo, sólo tengo que hacerme a mí mismo un Copy & Paste.

El ejemplo siguiente está pensado como una utilidad de notificación en una página Web, es decir, se conocen las direcciones de origen y destino con antelación y no es necesario el uso de adjuntos.

using System;
using System.Net;
using System.Net.Mail;


/// <summary>
/// Útiles de la aplicación
/// </summary>
public static class Utiles
{


    /// <summary>
    /// Envío de un correo electrónico
    /// </summary>
    /// <param name="subject">Asunto del mensaje</param>
    /// <param name="body"></param>
    public static void EnviaMensaje(string subject, string body)
    {
        try
        {
            string smtpServidor = "SERVIDOR_SMTP";
            string smtpUsuario = "CUENTA_USUARIO_STMP";
            string smtpPassword = "PASSWORD_SMTP";
            string cuentaDestino = "CUENTA_DESTINO";
            string cuentaOrigen = "CUENTA_ORIGEN";

            // Credenciales de autenticación
            NetworkCredential credenciales = new NetworkCredential(smtpUsuario, smtpPassword);
            // Permite a las aplicaciones enviar mensajes de correo electrónico mediante el protocolo SMTP 
            SmtpClient cliente = new SmtpClient(smtpServidor);

            // Se descartan las credenciales por defecto
            cliente.UseDefaultCredentials = false;
            // Credenciales de autenticación
            cliente.Credentials = credenciales;
            // Los mensajes de correo electrónico se envían a un servidor SMTP a través de la red
            cliente.DeliveryMethod = SmtpDeliveryMethod.Network;

            // Dirección de destino
            MailAddress direccionDestino = new MailAddress(cuentaDestino, "Formulario Web");

            // Dirección de origen
            MailAddress direccionOrigen = new MailAddress(cuentaOrigen);

            // Mensaje
            MailMessage mensaje = new MailMessage();
            mensaje.From = direccionOrigen;
            mensaje.To.Add(direccionDestino);
            mensaje.Subject = DateTime.Now.ToString() + " " + subject;
            mensaje.Body = body;
            mensaje.IsBodyHtml = false;

            // Envío del mensaje
            cliente.Send(mensaje);

            // Limpieza
            mensaje = null;
            direccionOrigen = null;
            direccionDestino = null;
            credenciales = null;
            cliente = null;
        }
        catch { }
    }


}

Publicado en ASP.Net, C#, NetFramework | 1 comentario

Ejecución del código del blog

Publicado por alskare en 17/08/2009

Unos amigos míos, desde http://www.velasco.biz están incluyendo, en su página, rutinas que permiten probar online gran parte del código insertado en este blog. De esta manera, además de ver “las tripas” desde aquí, se puede probar el código al momento.

Un saludo para la gente de Velasco.biz.

Publicado en Personales | 1 comentario

 
Seguir

Get every new post delivered to your Inbox.