[LINUX] Je veux convertir une image en WebP avec sucette

WebP a été officiellement pris en charge le 27 avril 2020: tada: [^ webp-official] Vous n'avez donc plus à vous soucier de:

[^ webp-official]: PHP7.3 supporte maintenant les fichiers image au format "WebP" qui sont efficaces pour accélérer le site! - Sucette


J'ai réussi à convertir des images JPEG et PNG au format WebP sur un serveur de location de sucettes. On suppose que le plan standard ou supérieur (une connexion SSH est possible).

Lollipop PHP ne prend pas en charge la fonction ʻimagewebp`

Conversion WebP? ʻImagewebp` Il est facile de gagner si vous utilisez la fonction: thumbsup: Si vous pensez ...

Fatal error: Uncaught Error: Call to undefined function imagewebp()



 N'a pas fonctionné. Si vous vérifiez avec `phpinfo ()`
 ![lolipop-phpinfo-gd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617255/ef6cf73a-d685-a14d-af51-d727606969eb.png)
 Il s'avère que les sucettes ne prennent pas en charge WebP. [^ webp-support]
 [^ webp-support]: Lorsque j'ai contacté le support, j'ai reçu une réponse indiquant qu'il n'était pas prévu de prendre en charge WebP pour le moment (26 mars 2019). ~~ Je voudrais m'y attendre à l'avenir. ~~

## Créez un environnement qui peut être converti en WebP par vous-même
 `cwebp`Vous pouvez convertir l'image au format WebP à l'aide de l'outil de ligne de commande ([A new image format for the Web | WebP | Google Developers](https://developers.google.com/speed/webp)). En d'autres termes`cwebp`La solution est de le rendre disponible sur le serveur lollipop.

### politique
 Copiez les outils de ligne de commande `cwebp` et les bibliothèques requises construites dans un environnement de type lollipop sur le serveur lollipop. Le serveur de location Lollipop ne peut pas utiliser `gcc` et encore moins` make` ([Liste des commandes disponibles --Lollipop](https://lolipop.jp/manual/user/ssh/#p-command)), donc serveur de location Il est impossible de bâtir sur.

### Construire un environnement de construction
 Créez un environnement similaire à un serveur de location de sucettes avec VirtualBox. Le but est de faire correspondre la version de ** [glibc](https://www.gnu.org/software/libc/) **. [^ glibc]
 [^ glibc]: Si vous essayez de télécharger [Utilitaires WebP précompilés](https://developers.google.com/speed/webp/download) et de l'exécuter sur un serveur lollipop, `` cwebp: /lib64/libc.so. 6: version `GLIBC_2.14 'non trouvée (requis par cwebp)' 'et vous pouvez voir que cela ne fonctionne pas. [^ glibc2]
 [^ glibc2]: Vous pourriez penser que changer la version de la glibc sur le serveur de location ... mais ce n'est pas possible car de nombreux programmes dépendent de la glibc. Si vous le forcez, toutes les commandes seront invalidées et vous serez bloqué (Référence: [[Résolu] erreur de relocalisation: /lib64/libc.so.6: symbol _dl_starting_up Solution --Qiita](/ sachiotomita / items / ef29520c55fc168191d8)).

#### Vérifiez la version glibc du serveur lollipop
 Sur le serveur de location

```shell
/lib64/libc.so*

Lorsque vous exécutez

GNU C Library stable release version 2.12, by Roland McGrath et al.

La version est affichée comme (C'était 2.12 dans mon environnement).

Installation de CentOS 6

Créez un environnement CentOS 6 (64 bits) avec la glibc version 2.12 avec VirtualBox. Puisque le serveur de location est CentOS [^ server-spec], le système d'exploitation le correspond également.

La méthode de création d'un environnement avec VirtualBox n'est pas décrite en détail ici. Pour l'expliquer assez grossièrement

  1. Installez VirtualBox
  2. Téléchargez CentOS 6.10 (64 bits) à partir du lien x86_64 dans Download --CentOS ( Il est recommandé d'utiliser aria2 car il peut être téléchargé à grande vitesse [^ aria2-qiita]. )
  3. Installez CentOS avec l'ISO téléchargé

C'est un flux. J'ai activé et utilisé SSH sans interface graphique.

[^ server-spec]: Server Specifications-Lollipop [^ aria2-qiita]: Référence: [Utilisez le téléchargeur explosif aria2, qui est plusieurs fois plus rapide que curl et wget --Qiita](/ TokyoMickey / items / cb51805a19dcee416151)

Construire cwebp

Construire avec CentOS de VirtualBox. La plupartCompiling the Utilities | WebP | Google DevelopersIl est écrit.

Installation des packages requis

Sans cela, l'image d'entrée ne peut pas être lue même si elle est construite.

sudo yum install libjpeg-devel libpng-devel

Téléchargez et décompressez la source

Téléchargez libwebp-1.0.3.tar.gz depuis la liste des téléchargements et extrayez-la ci-dessous

tar xvzf libwebp-1.0.3.tar.gz

Construire

Installez-le dans votre répertoire personnel (~ / bin / libwebp-1.0.3) en tenant compte du problème de le télécharger plus tard sur le serveur de location.

cd libwebp-1.0.3
./configure --prefix=$HOME/bin/libwebp-1.0.3
make
make install

Autorisez-le à fonctionner sur un serveur Lollipop

Copie des fichiers requis

Copiez les fichiers suivants dans le répertoire de base de votre serveur de location.

Local (VirtualBox) Serveur de location
~/bin/libwebp-1.0.3/bin/cwebp ~/usr/bin/cwebp
~/bin/libwebp-1.0.3/lib/libwebp.so.7.1.0 ~/usr/lib/libwebp.so.7.1.0
~/bin/libwebp-1.0.3/lib/libwebpdemux.so.2.0.6 ~/usr/lib/libwebpdemux.so.2.0.6

Créer un lien symbolique

Créez un lien symbolique pour la bibliothèque.

cd ~/usr/lib
ln -s libwebp.so.7.1.0 libwebp.so.7
ln -s libwebpdemux.so.2.0.6 libwebpdemux.so.2

Définition des variables d'environnement

Passez le chemin afin que vous puissiez trouver cwebp et les bibliothèques qu'il utilise.

cd ~
vi .bash_profile

Entrez dans le mode insertion avec la touche ʻInsert` et ajoutez le contenu suivant.

~/.bash_profile


export PATH=~/usr/bin:$PATH
export LD_LIBRARY_PATH=~/usr/lib:$LD_LIBRARY_PATH

Après l'édition, entrez en mode commande avec la touche ʻEsc, enregistrez avec: wqet quittez. En rechargeant.bash_profile` avec la commande suivante, le chemin sera dans l'état. Désormais, si vous vous connectez avec SSH, votre pass passera automatiquement.

source ~/.bash_profile

Si vous essayez d'exécuter cwebp et que l'affichage ressemble à celui ci-dessous, c'est OK.

Usage:

   cwebp [options] -q quality input.png -o output.webp

where quality is between 0 (poor) to 100 (very good).
Typical value is around 80.

Try -longhelp for an exhaustive list of advanced options.

Si vous obtenez une erreur indiquant que la bibliothèque est introuvable, vous pouvez copier la bibliothèque sur le serveur de location en vous référant à ~ / bin / libwebp-1.0.3 / lib / dans votre environnement local.

Utilisation depuis PHP

Veuillez noter que vous devez définir la variable d'environnement ainsi que ~ / .bash_profile lorsque vous utilisez PHP. Spécifiez la variable d'environnement non pas avec ~ / bin / ... mais avec le chemin absolu depuis la racine (un chemin comme / home / users / ..., qui peut être confirmé avec la commande pwd).

Recommended Posts

Je veux convertir une image en WebP avec sucette
Je veux être OREMO avec setParam!
Convertir une chaîne en image
Je veux faire ○○ avec les Pandas
Convertir un PDF en image avec ImageMagick
Je veux déboguer avec Python
Je souhaite convertir une chaîne de caractères ISO-8601 en heure japonaise
Je veux détecter des objets avec OpenCV
Je veux écrire un blog avec Jupyter Notebook
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Je souhaite utiliser une bibliothèque externe avec IBM Cloud Functions
Je veux faire un programme d'automatisation!
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
Essayez de générer une image avec aliénation
Exemple de conversion en ondelettes d'images en Python
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Je souhaite afficher une image sur Jupyter Notebook à l'aide d'OpenCV (mac)
Je souhaite créer un profil utilisateur Ubuntu Chrome avec Colab uniquement
Je veux utiliser MATLAB feval avec python
Convertir un PDF en image (JPEG / PNG) avec Python
J'ai essayé d'obtenir une image en grattant
Je veux moquer datetime.datetime.now () même avec pytest!
Je souhaite afficher plusieurs images avec matplotlib.
Je veux frapper 100 sciences des données avec Colaboratory
Je veux faire un jeu avec Python
Comment recadrer une image avec Python + OpenCV
Je souhaite utiliser le répertoire temporaire avec Python2
J'ai essayé de détecter un objet avec M2Det!
Je ne veux pas utiliser -inf avec np.log
#Unresolved Je veux compiler gobject-introspection avec Python3
Je souhaite utiliser ip vrf avec SONiC
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux recommencer avec Migrate de Django
Je veux écrire dans un fichier avec Python
Convertir 202003 en 2020-03 avec les pandas
Je souhaite envoyer Gmail avec Python, mais je ne peux pas en raison d'une erreur
Je veux écrire un élément dans un fichier avec numpy et le vérifier.
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
Je souhaite détecter une connexion non autorisée à Facebook avec Jubatus (1)
100 coups sur le traitement d'image !! (021-030) Je veux faire une pause ...
Je veux faire la transition avec un bouton sur le ballon
Je veux gérer l'optimisation avec python et cplex
Je veux escalader une montagne avec l'apprentissage par renforcement
Je souhaite développer des applications Android sur Android (débogage)
Convertissez l'image au format .zip en PDF avec Python
J'ai essayé d'implémenter le perceptron artificiel avec python
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana
Je veux AWS Lambda avec Python sur Mac!
Je souhaite créer manuellement une légende avec matplotlib
[TensorFlow] Je souhaite traiter des fenêtres avec Ragged Tensor
J'ai essayé de créer une application OCR avec PySimpleGUI
Je veux faire fonctionner un ordinateur quantique avec Python
J'ai essayé de trouver la classe alternative avec tensorflow