Convertisseur jpeg -> swf

Description

C'est une fonction entièrement écrite en PHP qui transforme à la volée des images JPEG en SWF de même taille et même compression. Fonctionne avec Flash 5 et ne necessite aucun outil compilé côté serveur.

php_swf_jpp ("image.jpg","image.swf");

-> Génére un swf sur le serveur "image.swf" à partir du JPEG "image.jpg"

Un alternative pour les serveurs (gratuits) ne suportant pas ming ...

PS : La hauteur ou la largeur de l'image ne doit excéder 400 (400x400 px), l'image JPEG ne doit pas être compressée en mode progressif ou optimisé.

Source / Exemple :


<?php
function comp2($n){
    $bin=decbin($n);
    while (strlen($bin)<13)$bin="0".$bin;
    for ($i=0;$i<strlen($bin);$i++){
        if (substr($bin,$i,1)=="0"){
            $rev=$rev."1";
        }else{
            $rev=$rev."0";
        }
    }
    $neg=bindec($rev)+1;
    $neg=decbin($neg);
    while (strlen($neg)<13)$neg="0".$neg;
    return ("1".$neg);
}
function convbinhex($n){
    $size=intval(strlen($n)/4);
    for ($i=0;$i<$size;$i++){
        $part=substr($n,$i*4,4);
        $val=bindec($part);
        $retour=$retour.dechex($val);
    }
    return ($retour);
}
function convsize($n,$base){
    $hex=dechex($n);
    while (strlen($hex)<$base)$hex="0".$hex;
    for ($i=0;$i<$base/2;$i++){
        $retour=$retour.substr($hex,$base-$i*2-2,2);
    }
    return ($retour);
}
function php_swf_jpg ($jpg,$swf){
    $image=$jpg;
    $sizejpg=getimagesize($jpg);
    $width=$sizejpg[0];
    $height=$sizejpg[1];
    $size=filesize($jpg);
    $twips_width=$width*20;
    $twips_height=$height*20;
    $bin_width=decbin($twips_width);while(strlen($bin_width)<14)$bin_width="0".$bin_width;
    $bin_height=decbin($twips_height);while(strlen($bin_height)<14)$bin_height="0".$bin_height;
    $bin_zero="00000000000000";
    $nbits="01110"; // 14
    $size_rect=$nbits.$bin_zero.$bin_width.$bin_zero.$bin_height;
    while (strlen($size_rect)<64)$size_rect=$size_rect."0";
    // Definir l'en tête
    $head=convbinhex($size_rect)."000c"."0100"."4302"."ffffff"."7f05".convsize($size+6,8);
    $head=$head."0100"."ffd9"."ffd8";

    // Définir la cloture du swf
    $rect="1"."10110"."0101000000000000000000"."0101000000000000000000"."0"."00000";
    $rect=$rect."00000000"."0001"."0000"."0"."00101"."01110".$bin_width.$bin_height."1";
    $rect=$rect."11110000".comp2($twips_width);
    $rect=$rect."11110001".comp2($twips_height);
    $rect=$rect."11110000".$bin_width;
    $rect=$rect."11110001".$bin_height;
    $rect.="00000000";

    $fin="bf00"."28000000"."0200".convbinhex($size_rect)."01"."41"."0100".convbinhex($rect);
    $fin=$fin."8606"."0601"."0002"."0000400000007777772E666F78617765622E636F6D";
    $fp=fopen ($image,"rb")or die ("impossible");

    $i=0;
    while(!feof($fp)){
        $char=fgetc($fp);
        $vn=ord($char);
        $tbl[$i]=$vn;
        $i++;
        
    }
    fclose($fp);
    $file_size=$size+strlen($fin)/2+strlen($head)/2+8;
    $head="46575305".convsize($file_size,8).$head;
    $fp=fopen($swf,"wb");
    for ($i=0;$i<strlen($head);$i+=2){
        $c=substr($head,$i,2);
        $val=hexdec($c);
        $push=chr($val);
        fwrite($fp,$push);
    }
    for ($i=0;$i<$size;$i++){
        $push=chr($tbl[$i]);
        fwrite ($fp,$push);
    }
    for ($i=0;$i<strlen($fin);$i+=2){
        $c=substr($fin,$i,2);
        $val=hexdec($c);
        $push=chr($val);
        fwrite($fp,$push);
    }
    fclose($fp);
}

?>

Conclusion :


Incluez simplement les 4 fonctions ci dessus et faite appel à la fonction php_swf_jpg()

Ex (en supposant que l'image voiture.jpg se trouve sur le serveur) :
<?php
include ("php_swf_jpg.php");
php_swf_jpg("voiture.jpg","resultat.swf");

print ("<a href='resultat.swf'>");
?>

Si vous rencontrez un Bug, faites moi parvenir vos codes sources et votre image et un déscriptif du bug.

php_swf_jpg@foxaweb.com

La fonction est aussi en téléchargement à http://www.foxaweb.com/php_swf_jpg/

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_foxy)