Classe PHP pour GD + API: Scriptopic

Il y a quelques jours, lassé de reprendre à zéro à chaque fois que je dois faire un truc avec GD sur PHP, je me suis dit que je pouvais faire une classe pour ça. Comme, exceptionnellement, j'avais un peu moins de deux heures de tranquillité, je m'y suis collé.

Au bout du compte, une fois la classe codée, il faut bien la tester...😬

drame.jpeg

C'est le problème des codeurs : ils ont du mal à arrêter de coder 🤩. Du coup, me voilà en route pour un script exploitant pictools.php... et ce qui aurait du prendre deux heures a pris plusieurs jours de papa codeur (petit rappel: 1 h de papa codeur = 7,2 heures de codeur normal en zone de guerre, au cours actuel 💣)

Bref, j'ai donc pondu une «api» avec un frontend permettant d'appliquer des transformations à une image à partir de son URL.

😎 petite image, long discours, toussa.

Capture du 2022-07-04 21-43-27.png

Donc, on fournit l'URL de l'image puis on ajoute des actions les unes à la suite des autres. Certaines n'ont pas besoin de paramètres (emboss, sepia etc) et d'autres si (contrast, resize etc)

Quand on clique sur un bouton action, on ajoute cette action à la liste avec, le cas échéant, l'input qui va bien pour les paramètres avec un placeholder de rappel.

Ainsi, on peut resize l'image à une taille précise ou à un pourcentage de la taille normale: tous les paramètres de coordonnées et de taille peuvent être précisés en pixels ou en pourcentages.

De plus, si on veut redimensionner l'image à une largeur en conservant le ratio automatiquement, il suffit de mettre -1 à la place de la hauteur: le script se démerdera tout seul.

La config ci-dessus donne le résultat ci-dessous:

pexels-photo-67818-large-758x505.jpeg

L'image d'origine

result.jpeg

Le résultat donné par scriptopic

Mais c'est pas tout

Donc, scriptopic permet de retoucher une image automatiquement. OK.👍

Mais cette image est utilisable directement depuis son URL de génération: si on colle l'URL précisée dans le cadre résultat, ça fonctionne. Avec un peu d'habitude, on peut le faire en direct (genre pour une image d'en-tête...). Comme les images retouchées sont sauvegardées avec un hash de l'url de requête, si on l'appelle à nouveau, elle ne sera plus générée mais simplement renvoyée (visible soulagement du serveur )

Et aussi

Comme des fois on a la flemme de faire une balise image, Scriptopic vous la donne directement: un double-clic et c'est copié prêt à coller...

Mais ce n'est toujours pas tout... (vous êtes gâtés)

Un truc rigolo, c'est que, comme pour Stamp, le front de scriptopic génère un bookmarklet en temps réel (c'est la deuxième ligne du cadre résultat): une fois satisfait de votre script, le bookmarklet généré permet de l'appliquer à l'image en cours: vous ouvrez l'image dans un onglet et clic-clac merci kodak.

Si vous voulez simplement envoyer l'image en cours pour travailler dessus, le bookmarklet de base est dispo en footer.

Atta atta, pars pas j'ai pas fini

Histoire d'ajouter encore une feature, vous pouvez stocker des scripts, à la main, dans le dossier ... scripts/ . Vous utiliserez le nom du fichier dans l'url avec ?script=[nomdefichier]

Ainsi, en sauvant le json de l'exemple (cadre «Script au format JSON») dans un fichier scripts/sepia.json vous pouvez ensuite l'appeler avec&script=sepia

Vous pouvez vous faire une bibliothèque de scripts pour tout et les appeler directement au lieu de vous taper du json dans l'URL

Tout est expliqué dans l'aide : https://api.warriordudimanche.net/scriptopic/?help

Hé m'sieu m'sieu:  pourquoi à la main ?  C'est mieux avec un  ptit bouton pour sauver  le script, non?

Ben parce que pour sauver sur le serveur, il faudrait un compte admin, donc un espace sécurisé et tout le toutim... et là, on parle pas du même projet

En conclusion

Le bouzin est testable là: https://api.warriordudimanche.net/scriptopic/

Et téléchargeable ici: https://api.warriordudimanche.net/scriptopic/?download

Je n'ai pas nettoyé le code, vu que je subis un harcèlement constant à la maison (lol), mais je le ferais, promis ! Le tout est en beta à l'arrache en licence amusez-vous avec.

Je n'ai pas encore écrit de doc pour pictools_class.php qui se trouve dans le zip, mais c'est assez simple à utiliser et chaque méthode est «documentée»


$picture=new pictool();// on peut mettre un array contenant les valeurs initiales des attributs : ['format'=>'png'] par exemple)
$picture->load('www.moncul.sur/la_commode.jpeg');
$picture->contrast(20);
$picture->sepia();
$picture->save("fichier.jpeg");
$picture->display();

Le script matrix qui alterne sketch et gaussian à plusieurs reprises puis colorise en vert

Pas flippant du tout.

Todo

  • Débugger, vu que ça va se dévoiler à l'usage plus intensif
  • ajouter le listage et l'usage des scripts sauvegardés dans le front.

Appli: Metabook - search ebooks on multiple websites

Parfois un pouet sur Mastodon pour partager une URL et une idée concorde avec un truc que t'avais déjà fait : https://framapiaf.org/@bronco/108423992250980547

Ainsi, Gilles me fait passer une adresse de métamoteur de recherche d'ebooks ( https://recherche-ebook.fr/ ) tout en notant que ce serait bien de faire une version qui soit plus propre... (pas de JS, de redirections, de pubs etc..)

therese.jpeg

écoutez Thérèse, comme la vie est savoureuse, n'est-ce pas...

Il se trouve que je m'étais fait un script dont le but était justement de charger des urls, de les parser, de récupérer et d'organiser du contenu.

Ça s'appelle Slurp
Pour faire simple, on crée des «profils» correspondant à une série d'URL avec la regex de parsing et le template correspondants. Il suffit alors d'appeler le profil pour obtenir une page de résultats mise en forme.

Comment ça marche ?

  1. on accède au script : ?p=<profil>
  2. slurp accède au fichier de configuration du profil dans packs/<profil>.php
  3. pour chaque url du pack, il charge la page, la parse, met en forme les données dans le template

Le pack est un array du type:

$packs['<profil>']=[
    [
        'url'=>'http://urltoparse.com/',
        'pattern'=>'REGEX PATTERN with (?<name>..) capture',
        'template'=>'<li> HTML Template where data is inserted to : use %name% '
    ],
    [
        'url'=>'http://urltoparse.com/',
        'pattern'=>'REGEX PATTERN with (?<name>..) capture',
        'template'=>'<li> HTML Template where data is inserted to : use %name% '
    ],

];

Dans le template de chaque url,

  • on peut utiliser %variable% pour placer les captures regex : (?<title>[^"]*?)%title%
  • deux variables sont toujours accessibles:
    • %ROOT% pour accéder à l'url du pack
    • %DOMAIN% pour accéder au domaine de cette url (pour compléter une URL relative par exemple)
Ya plus qu'à   adapter

J'ai ajouté la possibilité de créer un dossier au nom du pack contenant un header et un footer pour qu'on puisse faire un site à partir d'un profil. packstemplates/<profil>/

J'ai ensuite créé un pack contenant les principaux sites d'epubs, cherché les patterns regex...

Et voilà: metapub cherche sur six sites en même temps: http://slurp.warriordudimanche.net/?p=ebook

meta.jpg

Comme d'hab

  1. c'est fait à l'arrache, mais vous avez l'habitude
  2. c'est cadeau, faites-en ce que vous voulez: avec slurp, vous pouvez parser les sites que vous voulez (warez, catalogues, porno... )
  3. vous pouvez installer slurp sur votre serveur et adapter le pack ebook au fur et à mesure que des changements se font (domaine, html de la page etc)
  4. vous pouvez télécharger slurp avec le pack ebook ici: http://slurp.warriordudimanche.net/?download

A venir ?

  • On peut déjà commencer par faire une UI moins dégueu, ce sera pas mal
  • slurp permet de récupérer le résultat en json mais le RSS n'est pas encore implémenté...
  • ajouter des sites... et les maintenir.

Enjoy !

Work in progress: Quicomic

Après discussions avec quelques personnes qui trouvaient Broncomic sympa, je me suis lancé dans une reprise qui soit plus adaptable:

  • j'ai repris le système de positionnement (plus simple)
  • j'ai un peu clarifié le code
  • j'ai ajouté la possibilité de créer des packs: un dossier contenant un sous dossier par calque à superposer
  • du coup, le nombre de calques et leur ordre de superposition s'adapte au pack: on peut mettre plus ou moins de calques dans son pack.
  • le pack peut contenir un fichier ini dans lequel;
    • on peut configurer les formats d'images disponibles
    • on peut spécifier l'ordre des calques
    • on peut configurer l'endroit où l'image apparaît dans le calque (en pourcentages x et y)

Reste encore du taf avant de proposer le code:

  • une page de config permettant d'uploader un pack sous forme de zip (et qui s'installe seul)
  • un sélecteur de packs
  • terminer le pack par défaut
  • faire une page FAQ pour savoir comment faire son propre pack.

Bon  ben ça commence à prendre  forme avec des graphismes  par défaut et la possibilité de faire des  PACKS .png

Le code du dimanche: Iconeleon

Comme je le disais dans le billet précédent à propos de SVGBox, l'idée était bonne mais le poids était rédhibitoire.

Pourtant, ça peut être sympa d'avoir un catalogue d'icônes prêtes à servir et dont on puisse altérer la couleur, sans compter que ce serait une bonne alternative aux webfonts tout en étant plus accessible.

Donc, j'ai récupéré le pack d'icônes de fontAwesome et j'ai bidouillé une API qui permette de faire la même chose que SVGBox.net, à savoir obtenir une icône svg dans la couleur que l'on souhaite.

Par exemple:

api.warriordudimanche.net/iconeleon/?i=headphones donne:

et si on ajoute le paramètre c on peut changer la couleur: api.warriordudimanche.net/iconeleon/?i=headphones&c=red

La couleur peut-être au format HTML, un nom de couleur css ou un rgba quelconque...

api.warriordudimanche.net/iconeleon/?i=headphones&c=rgba(255,0,255,0.5)

Comme pour fancytation

Toute icône modifiée est sauvegardée en cache pour éviter une surcharge du serveur

  • help: affiche une aide
  • iconlist: renvoie la liste des icones au format json
  • search=string: renvoie le résultat de la recherche au format json
  • download: permet de télécharger le script php de l'api
  • Et en plus

    Je vous ai ajouté un frontend minimaliste pour rechercher les icones dans les 1615 du pack.

    liens

    Voilà

    Du coup, si ça peut être utile, n'hésitez pas à vous servir voire à proposer un frontend plus... comment dire ? abouti ?

    Nouvelle version: Unicode

    En passant, j'ai mis à jour ma page sur les caractères unicode...

    Il y a plus de rubriques et j'ai ajouté un moteur de recherche qui accepte plusieurs mots séparés par des espaces.

    par exemple: http://unicode.warriordudimanche.net/?search=aubergine

    Allez, bisou !

    Googol résiste (et ça fait du boulot)

    imgbin-computer-icons-avatar-deadpool-desktop-deadpool-pixel-art-x5Gc4h4YnvARncaJgpPeGT2bw.png
    La version 4.2 «unban» de Googol est en phase de test et elle m'a pris le pack premium de chez MaximumEffort. Toutefois, ça valait le coup: plutôt que de me contenter de rediriger vers duckduckgo lors du bannissement par google - ce qui arrivait de plus en plus souvent - j'ai opté pour l'utilisation temporaire d'un moteur alternatif à la place de google...

    (...)

    BigAscii [js]

    Dans la catégorie «script à la con» voici une page qui permet de transformer un texte en gros titre ascii. J'en ai eu besoin pour que la répartition de mon code pour Bozon se voie même dans la minimap de SublimeText.

    (faut dire que la classe post/get à elle seule contient 1700 lignes environ... )

    En vous rendant sur la page en question, vous pouvez taper un texte et sélectionner différents paramètres. Pour l'instant, elle ne gère que les caractères alphanumériques (je n'avais besoin que de ça)...

    Le script est simplissime et facilement modifiable... faites-vous plaisir et partagez vos versions

    La démo | Le zip

    Unicode - html

    J'ai mis à jour la page unicode.warriordudimanche.net pour ajouter la quantité de caractères qui manquaient.
    J'ai un peu recodé pour pouvoir faire des packs avec les listes qui ne se suivent pas (genre les maths, 4 packs ), j'ai ajouté un favicon et j'ai un peu changé le look...


    Si ça intéresse kékin, ben c'est par là : http://unicode.warriordudimanche.net/
    (le github: https://github.com/broncowdd/unicode_page )

    Au passage, petit message à Cyrille qui ne manquera pas de grogner à propos de Bozon3:





    [EDIT] broncowdd/googol: Une page php pour utiliser google en utilisant des liens safe: Googol parse la page de résultats et régénère une page en proposant des liens directs. (jetez également un oeil au référer ^^ )

    Juste en passant, pour les utilisateurs de Googol, j'ai ajouté la mise en surbrillance des mots-clés, si ça intéresse quelqu'un.

    De plus, je songe à créer une sorte de réseau de googol qui permettrait de renvoyer une requête vers une autre instance quand Google bloque la nôtre... Pour ça, il faudra ajouter une base des googol en ligne: avis à ceux qui veulent en être ;-)

    Bon, je fais un test de «googol network» : en gros, en cas de bannissement par google, votre instance va piocher au hasard dans une base d'URLs alternatives et leur renvoyer la requête. Cette base est contenue dans le fichier googol_db.php (auquel vous pouvez ajouter d'autres instances)

    $googol_db=[
        'https://googol.warriordudimanche.net',
        'https://search.green-effect.fr',
    ];

    Si le fichier n'existe pas, il est récupéré sur mon serveur, ou - en cas de serveur down - sur le serveur de github. L'avantage de mon serveur, c'est que vous avez la garantie que je ne loguerai pas vos accès J'aurais pu ajouter une fonction de mise à jour du fichier, mais bon... pas là.

    Si vous voulez ajouter votre instance à la base «officielle», n'hésitez pas à commenter !

    Bon, sur ce, je vais végéter un moment passsque voyez-vous, en ce moment, je passe ma vie en bagnole d'un rendez-vous à l'autre, toujours à dache, entre deux activités jardinières, potagères ou cuisinières...

    Donc, là, c'est décidé:

    Fil RSS des articles