Mostrar Mensajes

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


Temas - westwest

Páginas: 1 [2] 3 4 ... 12
16
Presentaciones / Mi presentación
« en: 09 de Febrero de 2010, 22:08:46 pm »
Ya que les dió por presentarse... xD

Hola, soy westwest y soy medio más o menos en PHP...

^^ No pongo nada pero me hacia ilu xD (Saludadhombre! xD)

17
Para los que no sepan que es REGEX o POSIX, ambas son "expresiones regulares", no se como explicarlo. A mi entender, son una serie de "reglas" para crear expresiones que validen textos no exactos (EMails, fechas...)

Lo básico sobre REGEX (las expresiones regulares de toda la vida xD) lo podeis encontrar en este tuto de Focux.

Antes que nada, ¿Porqué pasar a POSIX?
Quizás algunos lo sepais, pero para los que no...
En PHP 6 REGEX pasará a la historia, funciones como ereg(i), ereg(i)_replace (las que creo que más útiles pueden ser a este nivel, o las únicas que conozco xD) dejarán de funcionar.

En su lugar habrá que usar preg_match como ereg(i) y preg_replace en lugar de ereg(i)_replace.

Habréis notado que las funciones REGEX tienen una (i), eso es porque existe ereg y eregi, y ereg_replace y eregi_replace; según son case-sensitive (distingue mayusculas y minusculas) o no.
En POSIX no hacen falta funciones extras, ahora verás porqué :P

Ahora, el como...
POSIX en el fondo (y en la superficie) es REGEX... con unas pocas diferencias
1º: Caracteres de principio y fin.
En POSIX la expresión debe tener una / al principio y al final (creo que se puede hacer con otros caracteres, lo he visto con @ o.O).

// Esto reemplazaría "numeroX" por "número: X", es una función algo inútil, pero es un ejemplo...
// REGEX
ereg_replace('numero[0-9]+', 'número: \\1', $texto);
// POSIX
preg_replace('/numero[0-9]+/', 'número: \\1', $texto);

Observa que es identica, incluida la sustitución (\\1, \\2, \\N), excepto por las barras.
2º: Escape
Cuando usamos algún caracter reservado (en un BBCode, los [ y ], por ejemplo) debemos escaparlo...
En REGEX se ponen dos barras inclinadas, en POSIX solo 1.
Cabe destacar, que en POSIX la barra inclinada hay que escaparla...

// (.*) indica cualquier texto...
// REGEX
ereg_replace(&#39;\\[b\\](.*)\\[/b\\]&#39;, &#39;<b>\\1</b>&#39;, $texto);
// POSIX
preg_replace(&#39;/\[b\](.*)\[\/b\]&#39;, &#39;<b>\\1</b>&#39;, $texto);


Basicamente, ya puedes pasar de REGEX a POSIX y ser válido en PHP6
Pero, en REGEX yo uso eregi para que no distinga entre mayusculas y minusculas, ¿Cómo lo hago?

Usando las flags (banderas), pero no las confundais con parametros de la función, estas flags van en la expresión propiamente dicha, detras del último /
Cómo no estoy muy adentrado en este tema, conozco 3, y si es que hay más, no se su función...

NOTA: Esto está algo mal, así que mañana con tiempo lo pondré bien

i -> Para hacerlo insensible a mayusculas y minusculas

$preg1 
preg_match(&#39;/^hola$/&#39;, $var);
// hola validaría, pero HOLA, Hola, hOla, HOla... no validarían
$preg2 preg_match(&#39;/^hola$/i&#39;, $var);
// hola validaría, y también HOLA, Hola...

Usi -> No se como explicarlo, digamos que toma lo primero que encuentra, además lo vuelve insensible, algo así:
$preg preg_replace(&#39;/\[b\](.*)\[\/b\]/Usi&#39;, &#39;<b>\\1</b>&#39;, $texto);
El texto "Hola [*b]que tal?[/b*], yo muy bien [*b]^^[/b*] (Sin asteriscos)
Lo convertiría a:
Hola que tal?, yo muy bien ^^

Uis -> Cómo el anterior, pero anidado, es decir, coge primero y último:
$preg preg_replace(&#39;/\[quote\](.*)\[\/quote\]/Uis&#39;, &#39;<b>\\1</b>&#39;, $texto);
El texto "¿Porqué dijiste esto?:
[quote*]
Al que dijo:
[quote*]Tonto el que lo lea[/quote*]
¿Dónde leíste eso para aprenderlo? :P
[/quote*]
Lo convertiría a:
¿Porqué dijiste esto?:
Citar
Al que dijo:
Citar
Tonto el que lo lea
¿Dónde leíste eso para aprenderlo? :P

Espero que os halla quedado claro y os sea útil ^^

Salu2.

Más información: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

18
PHP / Saber header de otra web
« en: 12 de Enero de 2010, 21:18:43 pm »
Hola, necesito obtener los header de una página externa (en concreto, content-type), k funcion puedo usar para ello?

Salu2!

19
PHP / Problema con SUM de MySQL
« en: 08 de Enero de 2010, 17:43:35 pm »
hola, estoy intentando hacer un TOP. En el cual se califican posts. Para ello lo ordeno segun los puntos, los puntos se guardan en la tabla points, con la estructura:
id
user_to -> Usuario k recibe puntos
user_from -> El k los envia
post -> El post en el k los da
pnum -> El numero de puntos que da...
Para sacar la cantidad total de puntos uso SUM, pero solo coge 1 dato en el que suma los puntos de todas las entradas de la tabla
Uso esta query:

mysql_query
("SELECT p.id AS id, p.title AS title, c.urlname AS uname, SUM(po.pnum) AS points FROM posts AS p, categories AS c, points AS po WHERE po.post = p.id && c.id = p.cat && po.time >= &#39;".$qt."&#39; ORDER BY points DESC LIMIT 15");


Como arreglo eso? Salu2

20
Tutoriales PHP / MySQL - Usar varias tablas y usar AS
« en: 26 de Diciembre de 2009, 19:29:05 pm »
Me aburro, asi que se me ocurrió explicar un poco por encima esto...

Antes de empezar, teneis que saber que no hay por que seleccionar todos los datos de la tbla (usando *), se pueden coger datos especificos (SELECT nombre, contrasena FROM usuarios)...

AS se usa para asignar un nombre a algo extraido de mysql, de esta manera, podremos obtenerlo con mysql_fetch_array, por ejemplo, quiero obtener el valor absoluto de un numero guardado en MySQL (el valor absluto se calcula mediante la funcion abs de MySQL)

Ejemplo:

$query 
mysql_query("SELECT num, abs(num) AS nabsoluto FROM numeros");
while(
$fetch mysql_fetch_array($query)) {
echo &
#39;Numero: &#39;.$fetch[&#39;num&#39;].&#39; absoluto: &#39;.$fetch[&#39;nabsoluto&#39;].&#39; <br>&#39;;
}

Aquí, he seleccionado la columna num y el absoluto de num de la tabla numeros.
Al absoluto le he asignado el nombre "nabsoluto".

Es facil, ¿No?

Pero no se usa solo con datos, si no con las propias tablas si queremos (FROM mitabla AS latabla), más por comodidad que usabilidad.


Para seleccionar datos de varias tablas debemos indicar varias en el FROM:
FROM tabla1, tabla2

Podemos asignarles un nombre:
tabla1 AS t1, tabla2 AS t2

Y para coger datos, usamos el nombre seguido de un punto y el campo, asi:
SELECT t1.nombre, t2.nombre FROM tabla1 AS t1, tabla2 AS t2 WHERE t1.id = '2' OR t2.id = '2' ORDER BY t1.id

Como veis, tambien es así en el WHERE y ORDER BY.

Un ejemplo practico. Queremos seleccionar los mensajes de usuarios con rango 1, normalmente lo ariamos asi:


$mensajes 
mysql_query("SELECT * FROM `mensajes`");
while(
$mensaje mysql_fetch_array($mensajes)) {
$usuario mysql_query("SELECT rango FROM `usuarios` WHERE id = &#39;".$mensaje[&#39;autor&#39;]."&#39;");
$fetch mysql_fetch_array($usuario);
if(
$fetch[&#39;rango&#39;] == 1) {
echo $mensaje[&#39;contenido&#39;];
}
}

Hacer esto nos ha llevado 2 querys y un if, ademas de ser molesto, son monton de querys, porque por cada mensaje, se hace una query para el usuario, (con 100 mensajes hariamos 100 querys!)

Es mucho mas simple hacer esto:

$mensajes 
mysql_query("SELECT m.* FROM mensajes AS m, usuarios AS u WHERE u.id = m.autor AND u.rango = &#39;1&#39;");
while(
$mensaje mysql_fetch_array($mensajes)) {
echo 
$mensaje[&#39;contenido&#39;];
}


Aquí, usamos una sola query (para 1 mensaje o para 100).
En ella seleccionamos todo (con el comodin *) de la tabla mensajes.
En el WHERE, he indicado que el id del usuario tiene que ser el guardado en la tabla mensajes (para ese mensaje) y el rango de ese usar debe ser 1.
Por supuesto, para mostrar datos del user podemos poner SELECT m.*, u.nombre, u.avatar,...


Espero que esto os sirva, es bastante sencillito ;)

21
PHP / Seleccionar datos de db segun probabilidades
« en: 25 de Diciembre de 2009, 22:41:33 pm »
Hola, para las tiendas de mi juego, necesito sacar aleatoriamente objetos de la db segun la probabilidad guardada en una columna (llamada "probability")
Pero no se como... ahora mismo lo que hago es sacar todos los objetos y mediante rands sacar objetos, que guardo en un array. Pero esto me ocupa cientos y hasta miles de rands para 20 objetos, que es lo que debo sacar normalmente... (aunque hay uno, pero hice cuentas xD)

He pensado en usar ORDER BY RAND(probability) pero no se si iria, y no puedo probarlo :S

¿Alguien sabe como acerlo?

salu2

EDITO: Mirando mysql he visto que se puede usar RAND(algo) siendo ese "algo" la "semilla" pero no se si es para esto, ¿Alguien me lo puede confirmar¿

22
CSS / Sprites
« en: 18 de Diciembre de 2009, 21:01:31 pm »
El uso de sprites es una tecnica muy util para acelerar el tiempo de carga de nuestra web.
Consiste en juntar varias imagenes (normalmente del mismo tamaño) en una, que cargaremos y mostraremos individualmente.
Con esto evitamos tener que llamar muchas imagenes, que necesitan cabeceras con información que retardan mucho la carga.
Un ejemplo seria algo asi (normalmente se usan más imagenes... y sobre las imagenes no hagamos comentarios xD):


Yo  muestro las imagenes asi:
Código: [Seleccionar]
<tr>
<td class="td1"></td>
<td class="td2"></td>
</tr>
Ahora mostraremos las imagenes, usando CSS:
Código: [Seleccionar]
.td1 {
width: 50px;
height: 50px;
background: url(urlsprite.png) 0 0 no-repeat;
}
.td2 {
width: 50px;
height: 50px;
background: url(urlsprite.png) -50 0 no-repeat;
}
El truco consiste en "mover" el fondo. Al poner 0 0 coge la imagen normal, y como tiene width:50px, coge el ancho de la primera imagen.
Sin embargo, en la segunda uso -50, lo que mueve la imagen 50px a la izquierda, y "coge" la segunda imagen.

Es una tecnica bastante sencilla, y muy util cuando cargas muchas imagenes...

Cualquier duda, aquí estoy, salu2

23
PHP / Str-replace un numero determinado de veces.
« en: 30 de Noviembre de 2009, 20:18:23 pm »
Hacia mucho que no posteaba una duda :P ya me tocó xD

Bien, mi problema es que tengo una cadena en la que deseo reemplazar una palabra 1 sola vez, es decir,
supongamos quiero sustituir 'hola' por '1234' una vez en la cadena 'hola pepe! hola mariano!'
usando str_replace quedaria: '1234 pepe! 1234 mariano!'
y yo quiero que quede: '1234 pepe! hola mariano!'

Que funcion puedo utilizar?

Salu2

24
JavaScript / JS Basico: Accediendo a los elementos y sus atributos
« en: 12 de Noviembre de 2009, 22:31:28 pm »
JavaScript trabaja con objetos, no os asusteis, es mas sencillo que PHP.
Cada objeto es un ELEMENTO, cada div, cada input, el BODY...

Para usarlos se almacenan en una variable. Se puede acer de varias maneras.

1º Usarlo directamente:
si en un input keremos vaciarlo:
Código: [Seleccionar]
<input onclick="this.value='';">
THIS es el input en cuestion, THIS puede enviarse a una funcion usando onclick="funcion(this);", en la funcion tenemos ya el objeto!

2º Llamarlo a mano...

Para ello podemos usar el mas usado, getElementById:
Como su nombre indica, coge un elemento segun su id:
var mielemento = document.getElementById('jiji');
obtendriamos el elemento con ID jiji

Tambien podemos usar getElementsByTagName:
Este devuelve un array:
var divsdelapagina = document.getElementsByTagName('div');
obtendriamos los div de la pagina, y accederiamos por la variable:
divsdelapagina[0], divsdelapagina[1]... etc

os preguntareis, ¿Por que pongo document?
porque cogemos los elementos del DOCUMENTO, pero podemos obtenerlo desde otro elemento.
Por ejemplo, queremos coger los input de un form, lo ariamos asi:

Código: [Seleccionar]
var miform = document.getElementById('miform');
var inputs = miform.getElementsByTagName('input');

¿Entendido?, espero k si


Ahora accedamos a sus atributos
En js, todo va asi:
algo.subalgo.subsubalgo

Para acceder al valor de un input:
Código: [Seleccionar]
<input onclick="alert(this.value);">

Al darle click al input mostraria una alerta con su valor

Cada elemento diferente (div, input...) tiene sus atributos, y hay algunos comunes claro...

Aki acaba el tuto, sabiendo esto, ya podeis acer casi de todo en JS!!

Salu2

25
JavaScript / [Tuto] Usar los "offset": Centrar capa y saber dimensiones de pagina
« en: 12 de Noviembre de 2009, 22:17:42 pm »
Usando los "offset" se pueden hacer muchas cosas... 2 posibles las comentare ahora:

CENTRAR UNA CAPA
En este tutorial expliqué como poner una capa centrada.
Ahora usando offset centraremos una capa la cual no sabemos las dimensiones.

Imaginemos que tenemos un codigo PHP que mostrara un div con una alerta, como no sabemos lo que ocupa el texto, no nos arriesgamos a poner unas medidas fijas ya que quedara o grande o pequeño, asi que colocamos el div, algo asi:

// Cuidado con la ID
echo &#39;<div id="midiv" style="position:absolute;">&#39;.$textoalerta.&#39;</div>&#39;;

Para kien no sepa PHP (raro en un foro de PHP) $textoalerta es el texto, (que es mas grande logicamente) y la etiketa div lo k debe interesar ahora.

Para que el div se centre, ejecutaremos una funcion al cargar la pagina, añadiendo onload al body asi:
Código: [Seleccionar]
<body onload="centrardiv();">

ahora crearemos la funcion (obviamente va en el HEAD, en una etiketa script):
Código: [Seleccionar]
function centrardiv() {
var div = document.getElementById('midiv'); <!--Obtenemos el objeto del div-->
div.style.marginTop = '-' + (div.offsetTop/2) + 'px'; <!-- Ponemos el margin del top, con el offset entre 2, la mitad; el "-" delante y "px" detras
div.style.marginLeft = '-' + (div.offsetLeft/2) + 'px'; <!-- Igual con left -->
}

De esta manera hemos centrado el div perfectamente y sin lios de cabeza calculando anchos de texto

SABER DIMENSIONES DE PÁGINA
Saber las dimensiones de una página ha sido siempre un engorro, usando los offset, se obtiene de una manera facil las dimensiones de la misma:

Primero creamos una variable para el ancho y alto de la pagina, fuera de cualkier funcion (pero dentro de la etiketa SCRIPT)
Código: [Seleccionar]
var ancho_ventana, alto_ventana;
Añadimos al body un onload:
Código: [Seleccionar]
<body onload="dimensiones();">

ponemos un div de 1x1, con visibility:hidden para k no se vea, con posicion absolute, right y bottom a 0, para k kede en la eskina inferior derecha
Código: [Seleccionar]
<div id="dimensiones" style="position:absolute;right:0px;bottom:0px;width:1px;height:1px;visibility:hidden;"></div>

ATENCION: Si ponemos el codigo al principio del body, obtendremos las dimensiones SIN scroll, si lo ponemos al final, tras todo codigo, lo obtendremos CON scroll, podeis poner las 2 con 2 id y funciones distintas, por supuesto

Ahora la funcion
Código: [Seleccionar]
function dimensiones() {
var div = document.getElementById('dimensiones'); <!-- el div -->
ancho_ventana = div.offsetLeft+1; <!-- cogemos la distancia a la izkierda y sumamos 1, asi obtenemos el ancho -->
alto_ventana = div.offsetTop+1; <!-- igual con el alto -->
}
Hemos obtenido las medidas en 2 variables rapidamente!!!


Espero que os haya gustado, pronto pondre mas "tutos"

26
CSS / [Explicacion] z-index
« en: 12 de Noviembre de 2009, 22:05:02 pm »
Aunque parece que las webs trabajan en dos dimensiones (x y) trabajan en 3 (la tercera, z)

z-index es un atributo que establece la profundidad de un elemento, asi un elemento con un z-index 3 aparece debajo de otro con z-index 4

Si ponemos z-index a los elementos no tienen k ir en orden, podemos poner 1 y luego saltar al 1000. Ademas de que los elementos suelen tener un z-index por defecto.

Esta explicacion os ayudará bastante (o eso espero)

27
CSS / [Tuto] Centrar una capa
« en: 12 de Noviembre de 2009, 22:02:32 pm »
Mucha gente se come la cabeza para centrar una capa, como para mostrar mensajes.

En realidad es tan sencillo como hacer esto (con CSS):
1º Definir un ancho y alto (Ej: 100x100)
2º Usar margin-top y margin-left para restar la mitad del ancho alto (Ej: -50 -50 notad el "-")
3º MUY IMPORTANTE: Colocar position como ABSOLUTE, para que no dependa del elemento que lo contiene
4º (Opcional, recomendado): Establecer un z-index alto para que se superponga sobre el resto de elementos
Y ya esta!
Quedaria algo asi
Código: [Seleccionar]
<div style="width:100px;height:100px;margin-top:-50px;margin-left:-50px;position:absolute;z-index:1000;">HOLA, ESTOY CENTRADO</div>

Es muy sencillo ;), para cerlo mas dinamico, podeis ver este tuto

28
JavaScript / [MiniTuto] "offset"
« en: 12 de Noviembre de 2009, 21:56:56 pm »
Los "offset" son propiedades que tienen todos los elementos, nos permiten obtener algunos datos de ellos, los offset son: offsetTop, offsetLeft, offsetWidth, offsetHeight

Para kien sepa algo, dira... eso lo cojo del CSS, pero aki esta la cuestion! Para obtener el TOP (distancia del elemento a arriba de la pagina), LEFT (DISTANCIA HASTA LA IZKIERDA), WIDTH y HEIGHT desde CSS (elemento.style.top por ejemplo) hay que definirlo antes, esto se actualiza solo y no hay que definirlo.

No es muy necesario decir para que es cada uno (es que es obvio), pero es necesario conocerlos ya que al trabajar con JS, y en realidad con todo ahorran varios dolores de cabeza.

Podeis ver dos ejemplos

Salu2

29
Charlas / Offtopic / ¿Que tiene mi perfil?
« en: 05 de Noviembre de 2009, 21:31:28 pm »
Que tiene mi perfil? Es que ayer vi a Hugox viendolo, hoy a TLX y me pica la curiosidad xD

Ya se k es una tonteria xD

30
Tutoriales PHP / Gradientes con GD
« en: 04 de Noviembre de 2009, 16:30:12 pm »
Hace tiempo que hice este código, y me he decidido a hacer un pequeño tutorial ;)

Por si no sabes que es un gradiente, es un fondo que empieza en un color, y poco a poco cambia hasta otro color.

El código tiene 2 direcciones, horizontal y vertical.

Al código se le envia por get los siguientes parametros:
Ancho: ancho que tendrá la imagen
Alto: alto que tendrá la imagen
Color1: Color inicial
Color2: Color final
Dir: h o v según sea horizontal o vertical

Los colores se podrán dar en hexadecimal con 3 o 6 caracteres, o RGB separado por comas (ej: F00, FF0000; 255,0,0 para rojo)

Todas las comprobaciones las agrupo en un solo if, que explicare por partes, el if completo es:

if(!$_GET[&#39;color1&#39;] or !$_GET[&#39;color2&#39;] or !$_GET[&#39;ancho&#39;] or !$_GET[&#39;alto&#39;] or !$_GET[&#39;dir&#39;] or (!eregi(&#39;^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$&#39;, $_GET[&#39;color1&#39;]) && !eregi(&#39;^[a-fA-F0-9]{3}$&#39;, $_GET[&#39;color1&#39;]) && !eregi(&#39;^[a-fA-F0-9]{6}$&#39;, $_GET[&#39;color1&#39;])) or (!eregi(&#39;^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$&#39;, $_GET[&#39;color2&#39;]) && !eregi(&#39;^[a-fA-F0-9]{3}$&#39;, $_GET[&#39;color2&#39;]) && !eregi(&#39;^[a-fA-F0-9]{6}$&#39;, $_GET[&#39;color2&#39;])) or !is_numeric($_GET[&#39;ancho&#39;]) or !is_numeric($_GET[&#39;alto&#39;]) or (strtolower($_GET[&#39;dir&#39;]) != &#39;v&#39; && strtolower($_GET[&#39;dir&#39;]) != &#39;h&#39;)) { die(&#39;error&#39;); }

!$_GET['color1'] or !$_GET['color2'] or !$_GET['ancho'] or !$_GET['alto'] or !$_GET['dir']
Es para comprobar que todas las variables existan

(!eregi('^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$', $_GET['color1']) && !eregi('^[a-fA-F0-9]{3}$', $_GET['color1']) && !eregi('^[a-fA-F0-9]{6}$', $_GET['color1'])) or (!eregi('^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3}$', $_GET['color2']) && !eregi('^[a-fA-F0-9]{3}$', $_GET['color2']) && !eregi('^[a-fA-F0-9]{6}$', $_GET['color2']))
Con eregi comprobamos como son los colores, comprueba cada 1 de los colores para ver si corresponden al hexadecimal o RGB, esto usa expresiones regulares, que es otro tema.

 or !is_numeric($_GET['ancho']) or !is_numeric($_GET['alto'])
Comprueba que el ancho y el alto sean numericos

 or (strtolower($_GET['dir']) != 'v' && strtolower($_GET['dir']) != 'h')
Comprueba que dir sea h o v, strtolower sirve para pasarlo a minuscula y que puedan poner H o V sin problemas.

Una vez completada esta comprobacion vamos a "procesar" los colores. GD funciona con RGB, asique si está en hexadecimal lo pasaremos a RGB:


if(eregi(&#39;^[a-fA-F0-9]{3}$&#39;, $_GET[&#39;color1&#39;])) { // Si es hexadecimal con 3 caracteres
	
$r1 hexdec($_GET[&#39;color1&#39;]{0}.$_GET[&#39;color1&#39;]{0}); // hexdec pasa hexadecimal a decimal, que es cada numero del rgb, como son 3 numeros, debemos poner 2 veces el primer numero. Para quien no lo sepa al poner {0} obtenemos el 1er caracter, con {1} el segundo, etc
	
$g1 hexdec($_GET[&#39;color1&#39;]{1}.$_GET[&#39;color1&#39;]{1});
	
$b1 hexdec($_GET[&#39;color1&#39;]{2}.$_GET[&#39;color1&#39;]{2});
// esto igual
} elseif(eregi(&#39;^[a-fA-F0-9]{6}$&#39;, $_GET[&#39;color1&#39;])) { // Si es hexadecimal con 6 caracteres
	
$r1 hexdec($_GET[&#39;color1&#39;]{0}.$_GET[&#39;color1&#39;]{1}); // Exactamente igual que arriba, pero ponemos el 1er y 2º caracter
	
$g1 hexdec($_GET[&#39;color1&#39;]{2}.$_GET[&#39;color1&#39;]{3}); // Con el 3er y 4º
	
$b1 hexdec($_GET[&#39;color1&#39;]{4}.$_GET[&#39;color1&#39;]{5}); // Con el 5º y 6º
} else {
	
list(
$r1$g1$b1) = explode(&#39;,&#39;, $_GET[&#39;color1&#39;]); // Si es rgb, hacemos un explode para separarlo por la coma y con list convertimos cada elemento deel array a las variables
}

if(
eregi(&#39;^[a-fA-F0-9]{3}$&#39;, $_GET[&#39;color2&#39;])) {
	
$r2 hexdec($_GET[&#39;color2&#39;]{0}.$_GET[&#39;color2&#39;]{0});
	
$g2 hexdec($_GET[&#39;color2&#39;]{1}.$_GET[&#39;color2&#39;]{1});
	
$b2 hexdec($_GET[&#39;color2&#39;]{2}.$_GET[&#39;color2&#39;]{2});
} elseif(eregi(&#39;^[a-fA-F0-9]{6}$&#39;, $_GET[&#39;color2&#39;])) {
	
$r2 hexdec($_GET[&#39;color2&#39;]{0}.$_GET[&#39;color2&#39;]{1});
	
$g2 hexdec($_GET[&#39;color2&#39;]{2}.$_GET[&#39;color2&#39;]{3});
	
$b2 hexdec($_GET[&#39;color2&#39;]{4}.$_GET[&#39;color2&#39;]{5});
} else {
	
list(
$r2$g2$b2) = explode(&#39;,&#39;, $_GET[&#39;color2&#39;]);
}
// Repetimos con el 2º color

if($r1 255 or $g1 255 or $b1 255 or $r2 255 or $g2 255 or $b2 255) { die(&#39;error&#39;); }
// Si algun color es mayor de 255 (el numero maximo de RGB) damos error



header
(&#39;Content-type: image/gif&#39;); // ponemos un header para indicar que sera una imagen gif

$img imagecreatetruecolor($_GET[&#39;ancho&#39;], $_GET[&#39;alto&#39;]); // creamos la imagen con las medidas de GET


Esto ya es el código en si.

if($_GET[&#39;dir&#39;] == &#39;h&#39;) { // Si la dirección es horizontal

/* incrementos, es la cantidad de "color" que debe sumarse por cada pixel.
Se calcula restando al segundo color el primero, y diviendolo por el ancho de la imagen (imagesx)
Cada incremento es para el Red, Green y Blue: ir, ig e ib respectivamente.
*/
$ir = ($r2-$r1)/imagesx($img);
$ig = ($g2-$g1)/imagesx($img);
$ib = ($b2-$b1)/imagesx($img);


for(
$i=0;$i<imagesx($img);$i++) { // con esto recorremos cada pixel de la imagen
	

	
$color imagecolorallocate($img$r1$g1$b1); // creamos el color para este pixel
	
imageline($img$i0$iimagesy($img), $color); // dibujamos una linea desde arriba hasta abajo, de un pixel, en el pixel actual ($i) y con el color anterior
// Sumamos los incrementos
	
$r1 += $ir;
	
$g1 += $ig;
	
$b1 += $ib;
}

} else { 
// Si la direccion es vertical
// Los incrementos, esta vez dividimos entre el alto
$ir = ($r2-$r1)/imagesy($img);
$ig = ($g2-$g1)/imagesy($img);
$ib = ($b2-$b1)/imagesy($img);

for(
$i=0;$i<imagesy($img);$i++) { // recorremos cada pixel de arriba a abajo
	

	
$color imagecolorallocate($img$r1$g1$b1); // El color
	
imageline($img0$iimagesx($img), $i$color); // La linea, esta vez horizontal
// incrementamos
	
$r1 += $ir;
	
$g1 += $ig;
	
$b1 += $ib;
}

// Fin del if de la dirección


Nuestra imagen está ya creada, solo nos queda mostrarla:

imagegif
($img); // Mostramos la imagen
imagedestroy($img); // Destruimos la imagen para liberar memoria


Sobra decir que hay que incluir las etiquetas de <?php y ?>

Esto podria usarse asi: archivo.php?ancho=100&alto=100&color1=F00&color2=FFF&dir=h

Cualquier duda posteadla y os respondere encantado.

Salu2!

Páginas: 1 [2] 3 4 ... 12