Recomendado: Cómo agregar o restar las fechas en la función Dataadd en ASP Este artículo introducirá el uso de la adición o sustracción de la fecha en la función Dataadd en ASP. Aquellos que necesitan saber pueden referirse a él.
1. Agregue la marca de agua a la imagenCopie el código de la siguiente manera: www.cuoxin.com
<%
Dim jpeg '' '' '// Declarar variables
Establecer jpeg = server.createObject ("Persits.jpeg") '' '' '// Componente llamado
Jpeg.open server.mappath ("aaa.jpg") '' '' // Ubicación de la imagen de origen
Jpeg.canvas.font.color = & H000000 '' '' // Color de fuentes de marcas de agua
Jpeg.canvas.font.family = "安安" '' '' // Font de marca de agua
Jpeg.canvas.font.size = 14 '' '' // Tamaño de fuente de marca de agua
Jpeg.canvas.font.bold = false '' '' // ¿Es audaz? Uso: Verdadero
Jpeg.canvas.font.bkmode = & hfffff '' '' // Color de fondo de fuentes
Jpeg.canvas.print 10, 10, "Studio Naughty Undefeated" '' '' '// Texto de la marca de agua, dos números 10 son las coordenadas XY de la marca de agua
Jpeg.save server.mappath ("aaa_05.jpg") '' '' '// Generar una nueva imagen con una marca de agua y guardar ubicación
Establecer jpeg = nada '' '' '// Iniciar sesión el componente y liberar el recurso
Response.write "<img src = aaa_05.jpg>" '' '' '// Mostrar la imagen después de que se genera la marca de agua en esta página
%>
2. Generar miniaturas
Copie el código de la siguiente manera: www.cuoxin.com
<%
Dim jpeg '' '' '// Declarar variables
Establecer jpeg = server.createObject ("Persits.jpeg") '' '' '// Componente llamado
Jpeg.open server.mappath ("aaa.jpg") '' '' // ubicación de imagen original
Jpeg.width = jpeg.originalwidth/4 '' '' '// Suponga que el ancho de la imagen es una cuarta parte de la imagen original
Jpeg.height = jpeg.originalHeight/4 '' '' '// Suponga que la altura de la imagen es una cuarta parte de la imagen original
Jpeg.sharpen 1, 130 '' '' '// Establezca el efecto de afilado
Jpeg.save server.mappath ("aaa_small.jpg") '' '' '// Generar ubicación y nombre en miniatura
Establecer jpeg = nada '' '' '// Iniciar sesión el componente y liberar el recurso
Response.write "<img src = aaa_small.jpg>" '' '' '// Mostrar la imagen de miniatura generada en esta página
%>
Introducción a los métodos de uso avanzado de los componentes ASPJPEG
ASPJPEG es un componente de procesamiento de imágenes muy potente, en la versión en inglés puro. Sin embargo, ha habido versiones gratuitas y versiones agrietadas, pero no hay muchos artículos que les proporcionen presentaciones detalladas y profundas. Incluso si lo hay, solo implican miniaturas de imágenes y marcas de agua. Tal vez sea por el inglés puro.
Aquí hablaré sobre el uso avanzado de Aspjpeg para estos temas. Las tecnologías aquí incluyen principalmente:
Miniatura de la imagen
Imagen de marca de agua
Tecnología del código de seguridad
Corte de imágenes
Fusionar la imagen
Soporte de base de datos
Métodos utilizados con poca frecuencia
y algunas tecnologías prácticas relacionadas
El único punto de deficiencia de ASPJPEG es que el método de salida es relativamente único. Aquí, hablamos principalmente de este método de salida que guarda la imagen y luego la llama. Además, soy relativamente vago, por lo que todavía se citan algunos códigos en el documento original, ¡y explicaré lo que no entiendo!
Los camaradas que han estudiado VB o .NET definitivamente lo entenderán de un vistazo. Viene el cepillo. jeje.
1. Miniatura de imágenes
Copie el código de la siguiente manera: www.cuoxin.com
<%
Establecer jpeg = server.createObject ("Persits.jpeg") Componente llamado
Rath = server.mappath ("imágenes") y "/clock.jpg" ruta de imagen pendiente
JPEG. Puque abierto
La altura y el ancho son 1/2 de la imagen original
Jpeg.width = jpeg.originalwidth / 2
Jpeg.height = jpeg.originalHeight / 2
Guardar la imagen
Jpeg.save server.mappath ("imágenes") & "/clock_small.jpg"
%>
<Img src = "imágenes/clock_small.jpg"> Ver imágenes procesadas
2. Imagen de marca de agua
Copie el código de la siguiente manera: www.cuoxin.com
<%
Establecer jpeg = server.createObject ("Persits.jpeg")
Jpeg.open server.mappath ("Images/Dodge_Viper.jpg")
Empezar a escribir
Jpeg.canvas.font.color = & h000000 '' '' White Color
Jpeg.canvas.font.family = "Courier New" Font
Jpeg.canvas.font.bold = true si se espesará
Jpeg.canvas.print 10, 10, "Copyright (C) XYZ, Inc."
Impresión coordenada x impresión coordenada y caracteres para imprimir
El siguiente es el procesamiento de la imagen de la imagen.
Jpeg.canvas.pen.color = & h000000 '' '' Black Color
Jpeg.canvas.pen.width = 2 ancho de pincel
Jpeg.canvas.brush.solid = false si debe negrita
Jpeg.canvas.bar 1, 1, jpeg.width, jpeg.hece
Inicio x coordenada inicial y longitud de entrada de coordenada de entrada altura de entrada
Jpeg.save server.mappath ("Images/Dodge_Viper_framed.jpg") Guardar
%>
3. Código de seguridad
El principio de SAFE MA es similar a agregar una marca de agua. Muchos amigos me preguntaron sobre técnicas de código específicas, así que lo escribiré aquí para compartirlo con usted. No les contaré sobre la gente común. jeje.
Copie el código de la siguiente manera: www.cuoxin.com
<%
Funciones que generan códigos de seguridad www.wuyouw.com
función make_randomize (max_len, w_n) max_len genera longitud, w_n: 0 puede contener letras, 1: solo para números
aleatorizar
para intcounter = 1 a max_len
whatnext = int ((1-0+1)*rnd+w_n)
Si watnext = 0 entonces
superior = 122
inferior = 97
demás
superior = 57
inferior = 48
final si
strnewpass = strnewpass & chr (int ((superior-bajo+1)*rnd)+inferior)
próximo
make_randomize = strnewpass
función final
%>
Genere una imagen del código de seguridad. Por supuesto que necesita preparar una imagen de fondo de antemano
Copie el código de la siguiente manera: www.cuoxin.com
<%random_num = make_randomize (4,1) genera un código de seguridad de 4 dígitos
sesión ("Random_num") = Random_num ¿Por qué se llama a la sesión? No tiene sentido sin código de seguridad de sesión. jeje
Establecer jpeg = server.createObject ("Persits.jpeg") Componente llamado
Jpeg.open server.mappath ("infos/random_pic/random_index.gif") Abra la imagen preparada
Jpeg.canvas.font.color = & h006699
Jpeg.canvas.font.family = "Arial Black"
Jpeg.canvas.font.bold = falso
Jpeg.canvas.printtext 0, -2, random_num
jpeg.save server.mappath ("infos/random_pic/random_index.bmp") Guardar
%>
<img src = "infos/random_pic/random_index.bmp" align = "absgmiddle">
Hazlo tú mismo. jeje.
4. Corte de imágenes
Las personas que no conocen Aspjpeg siempre han pensado que no pueden usarlo para cortar.
En realidad hay tal método
Crop X1, Y1, X2, Y2
Corte la coordenada X de la esquina superior izquierda del rectángulo, la coordenada X de la esquina inferior derecha de la coordenada Y
Daré una demostración a continuación
Establecer jpeg = server.createObject ("Persits.jpeg")
jpeg.open server.mappath ("/pic/1.gif")
jpeg.width = 70
Jpeg.height = jpeg.originalHeight*70 / jpeg.originawidth
jpeg.crop 0,0,70,52 El corte de inicio en realidad está eliminando la parte inferior de más de 52 píxeles
jpeg.save server.mappath ("/temp_pic/small_1.gif") Guardar
¿Qué tal, es muy simple?
5. Fusión de imágenes
Aquí queremos agregar la imagen del logotipo a la imagen dodge_viper.jpg
De hecho, el método de fusión de imágenes también se puede usar para imprimir dinámicamente marcas de agua.
Copie el código de la siguiente manera: www.cuoxin.com
Establecer foto = server.createObject ("Persits.jpeg")
Photopath = server.mappath ("imágenes") & "/dodge_viper.jpg"
Photo.apor Photopath
Establecer logo = server.createObject ("Persits.jpeg")
Logopath = server.mappath ("imágenes") & "/clock.jpg"
Logo.apuren logopath
Logo.width = 70
Logo.height = logo.width * logo.originalHeight / logo.originalwidth
Photo.Drawimage 0, 0, logotipo
Photo.sendbinary
Aquí utilizamos el método de salida de SendBinary. Por supuesto, también puede guardar el cambio Dodge_Viper.jpg primero y luego ingresarlo. Personalmente, no me gusta usar el método SendBinary, y es fácil cometer errores cuando la velocidad de Internet es lenta. No es muy bueno a la velocidad. jeje.
6. Soporte de base de datos
No diré mucho aquí. De hecho, es el método binario. Como todos sabemos, las imágenes solo se pueden almacenar como archivos binarios cuando se almacenan en la base de datos. Así que soy vago para escribir el código.
7. Más métodos
Canvas.line (izquierda, superior, derecha, abajo)
Dibujar una línea recta
Canvas.ellipse (izquierda, arriba, derecha, abajo)
Dibujar una elipse
Canvas.circle (x, y, radio)
Dibujar un círculo
Canvas.Bar (izquierda, superior, derecha, abajo)
Dibuja un rectángulo con el código
Canvas.font.shadowcolor
Color de la sombra de texto
Canvas.font.shadowxoffset tan largo
Configuración de coordenadas de Shadow X
Canvas.font.shadowyoffset tan largo
Y configuración de coordenadas
Canvas.font.bkmode como cadena
Fondo de texto
=======================================================
Hoy te contaré sobre el conocimiento de ASP agregando marcas de agua a las imágenes
ASP requiere componentes para agregar marcas de agua a las imágenes ... Las usadas comúnmente incluyen Aspjpeg y Wsimage desarrollado por los chinos ... el primero es gratuito durante 30 días ... el segundo es completamente gratuito ... por supuesto que tenemos que usar productos chinos ... jeje ...
Cómo registrar componentes :
Ingrese "regsvr32 [ruta dll]" en el símbolo del sistema
Agregar una marca de agua a la imagen no es más que obtener el tamaño de la imagen y luego escribir la marca de agua en ella ... el código ASP solo sirve como componente de control. Use el código para explicar todo.
1: Obtenga el tamaño de la imagen (aquí se expresa por valores de píxeles. Los amigos que estudian Photoshop deben entender)
Copie el código de la siguiente manera: www.cuoxin.com
<%
establecer obj = server.createObject ("wsimage.resize") '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'Componente de llamadas
obj.loadSoucePic Server.Mappath ("25.jpg") '' '' '' '' '' '' '' '' '' '' Abra la imagen, el nombre de la imagen es 25.jpg
obj.getSourceInfo iWidth, iHeight
Response.Write "El ancho de la imagen:" & iWidth & "<br>" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Response.Write "Altura de la imagen:" & iHeight & "<br>" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
strerror = obj.errorinfo
Si Strerror <> "" entonces
Respuesta.WRITE OBJ.ErrorInfo
final si
obj.
establecer obj = nada
%>
2: Agregue texto de agua
Copie el código de la siguiente manera: www.cuoxin.com
<%
establecer obj = server.createObject ("wsimage.resize")
obj.loadSoucePic Server.mappath ("25.jpg") '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
obj.Quality = 75
obj.txtmarkfont = "nube de color chino" '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Configuración de texto de texto de agua
obj.txtmarkBond = falso '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'establece el grosor del texto de la marca de agua
obj.markrotate = 0 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' El ángulo de rotación del texto de la marca de agua
obj.txtmarkheight = 25 '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
obj.addtxtmark server.mappath ("txtmark.jpg"), "Take You Out", & H00FF00 &, 10, 70
strerror = obj.errorinfo '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Si Strerror <> "" entonces
Respuesta.WRITE OBJ.ErrorInfo
final si
obj.
establecer obj = nada
%>
Tres: Agregar marca de agua de imagen
Copie el código de la siguiente manera: www.cuoxin.com
<%
establecer obj = server.createObject ("wsimage.resize")
obj.loadSoucePic Server.mappath ("25.jpg") '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Obj.LoadImgMarkPic Server.Mappath ("Blend.bmp") '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'Tes '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
obj.Quality = 75
obj.addimgmark server.mappath ("imgmark.jpg"), 315, 220 y hfffff, 70
strerror = obj.errorinfo '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Si Strerror <> "" entonces
Respuesta.WRITE OBJ.ErrorInfo
final si
obj.
establecer obj = nada
%>
De hecho, agregar una marca de agua a una imagen es así de simple. Entonces estoy hablando de otros dos usos principales del componente wsimage.dll. Incluido:
Recorte la imagen y genere la miniatura de la imagen.
Como estoy acostumbrado, agregaré comentarios al código:
Fotos recortadas :
Copie el código de la siguiente manera: www.cuoxin.com
<%
establecer obj = server.createObject ("wsimage.resize")
obj.loadsoucepic server.mappath ("25.jpg")
obj.Quality = 75
obj.cropimage server.mappath ("25_crop.jpg"), 100,10,200,200 '' '' '' '' '' '' '' '' '' '' Definen el tamaño del clip y genere el nombre de la imagen
strerror = obj.errorinfo
Si Strerror <> "" entonces
Respuesta.WRITE OBJ.ErrorInfo
final si
obj.
establecer obj = nada
%>
Comentario detallado: CropImage utiliza el método de CropImage de WSIMAGE. Al definir la generación de imágenes, 100 y 10 son los puntos de corte en la esquina superior izquierda, es decir, 100 píxeles a la izquierda de la imagen y 10 píxeles en la parte superior. Los últimos dos 200 representan la banda ancha cortada y la altura y la altura.
Generar miniaturas de imagen:
Copie el código de la siguiente manera: www.cuoxin.com
<%
establecer obj = server.createObject ("wsimage.resize")
obj.loadsoucepic server.mappath ("25.jpg") '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'Sets
obj.Quality = 75
obj.outputspic server.mappath ("25_s.jpg"), 0.5,0.5,3 '' '' '' '' '' '' '' '' '' '' '' '' Undó '' '' '' '' '' '' '' '' '' sets '' '' '' '' '' '' '' '' '' '' '' '' Sets
strerror = obj.errorinfo
Si Strerror <> "" entonces
Respuesta.WRITE OBJ.ErrorInfo
final si
obj.
establecer obj = nada
%>
Descripción detallada:
Hay cuatro formas de exportar miniaturas :
(1) Obj.outputspic Server.Mappath ("25_s.jpg"), 200,150,0
200 es el ancho de salida y 150 es la altura de salida. Este formulario de salida es el ancho y la altura de salida forzada, lo que puede causar deformación de la imagen.
(2) Obj.outputspic Server.Mappath ("25_s.jpg"), 200,0,1
Con 200 como ancho de salida, la altura de salida se escalará con la columna.
(3) Obj.outputspic Server.Mappath ("25_s.jpg"), 0,200,2
Con 200 como altura de salida, el ancho de salida se escalará con la columna.
(4) Obj.outputspic Server.mappath ("25_s.jpg"), 0.5,0.5,3
El primer 0.5 significa que la miniatura generada es la mitad del ancho de la imagen original, lo que significa la relación de reducción de ancho.
El segundo 0.5 significa que la miniatura generada es la mitad de la altura de la imagen original, lo que significa una alta relación de reducción.
La reducción constante en el ancho y la altura significa que la imagen original se escalará. Si la relación de zoom de ancho y altura es mayor que 1, la imagen original se ampliará.
Reimpreso de: http://hi.baidu.com/miracle521/blog/item/e3419133fdc00746ac4b5f25.html
2 -----------------------------------------------------------------------------------------------
Subir imágenes ASP.NET con marcas de agua (texto de texto de agua, marca de agua, texto + marca de agua)
Agregue una marca de agua a la imagen (texto de texto, marca de agua, marca de agua, texto + marca de agua)
Imagen de reproducción:
Figura 500) this.Width = 500 "Border = 0 <
Marca de agua 500) this.Width = 500 "Border = 0 <
Después de agregar una marca de agua a la imagen (tenga en cuenta la esquina superior derecha + directamente debajo)
500) this.Width = 500 "Border = 0 <
Código:Drawimg.cs
Copie el código de la siguiente manera: www.cuoxin.com
usando el sistema;
usando System.Drawing;
usando System.Drawing.imaging;
usando System.Drawing.Drawing2D;
clase pública Drawimg
{
String private WorkingDirectory = String.Empty; //Camino
cadena privada imageName = string.empty; // La imagen procesada
String private imagewater = string.empty; // Imagen de marca de agua
cadena privada fontString = string.empty; // texto de marca de agua
Enum DealType {Ninguno, Waterimage, Waterfont, Doubledo}; // comando enum
Trato privado de trato de trato;
Public Drawimg ()
{}
cadena pública PublicworkingDirectory
{
conseguir
{
devolver el directorio de trabajo;
}
colocar
{
WorkingDirectory = valor;
}
}
cadena pública PublicImageName
{
conseguir
{
devolver el nombre de imaginación;
}
colocar
{
ImageName = value;
}
}
Public String PublicImagewater
{
conseguir
{
Regrese Imagewater;
}
Establecer // Si establece una imagen de marca de agua, significa que desea usar el efecto de imagen de la marca de agua.
{
DealType = DealType.WaterImage;
Imagewater = valor;
}
}
Cadena pública PublicFontString
{
conseguir
{
devolver fontstring;
}
Establecer // Si se establece el texto de la marca de agua, significa que se requiere el efecto de texto de la marca de agua.
{
DealType = DealType.waterFont;
FontString = valor;
}
}
Public Void DealImage ()
{
IsDouble ();
Switch (DealType)
{
Case DealType.waterfont: WriteFont (); romper;
Case DealType.Waterimage: WriteImg (); romper;
Case DealType.Doubledo: WriteFontAndimg (); romper;
}
}
vacío privado isDouble ()
{
if (imagewater+""! = "" && fontstring+""! = "")
{
DealType = DealType.Doubledo;
}
}
Private Void WriteFont ()
{
// Establecer un directorio de trabajo
// String WorkingDirectory = @"c:/watermark_src/waterpic";
// Defina una cadena de texto para usar como mensaje de derechos de autor
// String Copyright = "Copyright? 2002 - AP Photo/David Zalubowski";
// Crear un objeto de imagen que contenga la fotografía a la marca de agua
Imagen imgphoto = image.FromFile (WorkingDirectory + ImageName);
int phwidth = imgphoto.width;
int phheight = imgphoto.Height;
// Crear un mapa de bits del tamaño de la fotografía original
Bitmap bmphoto = nuevo bitmap (phwidth, phheight, pixeflaMat.format24bpprgb);
bmphoto.setResolution (imgphoto.horizontalResolution, imgphoto.vericalResolution);
// Cargue el mapa de bits en un objeto gráfico
Graphics grPhoto = Graphics.FromIMage (bmphoto);
// -------------------------------------------------------------------------------------------------------------------------
// Paso #1 - Inserte el mensaje de derechos de autor
// -----------------------------------------------------------------------------------------------
// Establecer la calidad de renderizado para este objeto gráfico
Grphoto.SmoothingMode = SmoothingMode.Antialias;
// dibuja el objeto de imagen fotográfica en el tamaño original al objeto gráfico.
Grphoto.Drawimage (
imgphoto, // objeto de imagen fotográfica
nuevo rectángulo (0, 0, phwidth, phheight), // estructura rectángulo
0, // coordenado x de la parte de la imagen de origen para dibujar.
0, // y coordenada de la porción de la imagen de origen para dibujar.
phwidth, // ancho de la parte de la imagen fuente para dibujar.
Phheight, // Altura de la porción de la imagen de origen para dibujar.
GraphicSUnit.pixel); // unidades de medida
// -------------------------------------------------------------------------------------------------------------------------
// para maximizar el tamaño del mensaje de derechos de autor
// probar múltiples tamaños de fuente para determinar el mayor posible
// FUNT podemos usar para el ancho de la fotografía
// Defina una matriz de tamaños de puntos que le gustaría considerar como sea posible
// -----------------------------------------------------------------------------------------------
int [] tames = new int [] {16,14,12,10,8,6,4};
Fuente crfont = nulo;
Sizef crsize = new sizef ();
// recorre los tamaños definidos que verifican la longitud de la cadena de derechos de autor
// Si su longitud en píxeles es menor, el ancho de la imagen elige este tamaño de fuente.
para (int i = 0; i <7; i ++)
{
// Establecer un objeto de fuente en Arial (i) PT, Bold
// crfont = new Font ("Arial", tamaños [i], fontstyle.bold);
crfont = new Font ("Arial", tamaños [i], fontstyle.bold);
// Mide la cadena de derechos de autor en esta fuente
crsize = grphoto.measurestring (fontstring, crfont);
if ((Ushort) CRSize.Width <(Ushort) Phwidth)
romper;
}
// Dado que todas las fotografías tendrán alturas diferentes, determine un
// Posición 5% desde la parte inferior de la imagen
int ypixlesfrombottom = (int) (phheight *.05);
// Ahora que tenemos un tamaño de punto, use la altura de la cadena de derechos de autor
// para determinar una coordenada y para dibujar la cadena de la fotografía
flotante yPosfrombottom = ((Phheight - YPixlesFrombottom) - (crsize.Height/2));
// Determinar su coordenada X calculando el centro del ancho de la imagen
float xcenterofimg = (phwidth/2);
// Defina el diseño del texto configurando la alineación del texto en Centrado
StringFormat strFormat = new StringFormat ();
Strformat.alignment = stringalignment.center;
// Defina un pincel que es negro semi -trasparente (alfa establecido en 153)
SolidBrush Semitransbrush2 = nuevo SolidBrush (color.FromARGB (153, 0, 0, 0));
// Dibuja la cadena de derechos de autor
grphoto.drawstring (fontstring, // cadena de texto
crfont, // fuente
semitransbrush2, // cepillo
nuevo Pointf (xcenterofimg+1, yPosfrombottom+1), // posición
Strformat);
// Defina un cepillo que es blanco semi -trasparente (alfa establecido en 153)
SolidBrush Semitransbrush = nuevo SolidBrush (color.FromARGB (153, 255, 255, 255));
// Dibuja la cadena de derechos de autor por segunda vez para crear un efecto de sombra
// asegúrese de mover este texto 1 píxel a la derecha y hacia abajo 1 píxel
grphoto.drawstring (fontstring, // cadena de texto
crfont, // fuente
Semitransbrush, // cepillo
nuevo Pointf (xcenterofimg, yposfrombottom), // posición
Strformat);
imgphoto = bmphoto;
grphoto.dispose ();
// Guardar nueva imagen en el sistema de archivos.
imgphoto.save (WorkingDirectory + ImageName + "_finally.jpg", ImageFormat.jpeg);
imgphoto.dispose ();
// Alineación de texto
}
Compartir: solución de problemas confusos chinos de ASP No importa qué lenguaje exista un problema confuso, ASP no es una excepción. Este artículo presentará el método para resolver el código confuso en ASP. Los amigos que lo necesitan pueden referirse a él.