{"id":233009,"date":"2023-02-03T19:06:00","date_gmt":"2023-02-03T16:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233009"},"modified":"2023-02-08T13:12:21","modified_gmt":"2023-02-08T10:12:21","slug":"como-comprimir-imagenes-usando-la-api-imagerecycle-el-script-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-comprimir-imagenes-usando-la-api-imagerecycle-el-script-php\/","title":{"rendered":"\u00bfC\u00f3mo comprimir im\u00e1genes usando la API ImageRecycle (el script PHP)?"},"content":{"rendered":"\n<p><a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a> proporciona <a href=\"https:\/\/helloacm.com\/how-to-invoke-apis-the-javascriptajax-example\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API<\/a> para agregar im\u00e1genes\/pdf, comprimirlos y descargarlos. Esto hace que las cosas sean interesantes, as\u00ed que b\u00e1sicamente, en estos d\u00edas, quiero reducir las im\u00e1genes para reducir el espacio que ocupan en el <a href=\"https:\/\/helloacm.com\/ping-when-vpsdedicate-server-is-restarting\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">servidor VPS<\/a>. <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a> admite la optimizaci\u00f3n de las siguientes extensiones de archivo: JPEG\/JPG, GIF, BMP, PNG, PDF.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a536cd0.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a536cd0.png\" alt=\"\u00bfC\u00f3mo comprimir im\u00e1genes usando la API ImageRecycle (el script PHP)?\"><\/a><\/p>\n<p>imagenreciclar<\/p>\n<p>Aqu\u00ed est\u00e1 la documentaci\u00f3n de la API para <a href=\"https:\/\/www.imagerecycle.com\/image-and-pdf-compression-api#api-Images-postImage\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">agregar una nueva imagen<\/a>. <strong>POST \/im\u00e1genes<\/strong><\/p>\n<p>Ejemplo:<\/p>\n<pre><code>\u00a0 curl -X POST \n\u00a0 \u00a0 -d 'auth={\"key\":\"your_api_key\",\"secret\":\"your_api_secret\"}' \n\u00a0 \u00a0 -d 'url=&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/uploadbeta.com\/share-image\/2xw\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;uploadbeta&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;share&lt;\/span&gt;&lt;span&gt;-&lt;\/span&gt;&lt;span&gt;image&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;2xw&lt;\/span&gt;&lt;\/a&gt;' \n\u00a0 \u00a0 -d 'params={\"compression_type\":\"lossy\"}' \n\u00a0 \u00a0 '&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/api.imagerecycle.com\/v1\/images\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;api&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;imagerecycle&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;v1&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;images&lt;\/span&gt;&lt;\/a&gt;'<\/code><\/pre>\n<p>Si en su lugar se especifica un archivo local, debe usar la siguiente sintaxis:<\/p>\n<pre><code>\u00a0 curl -X POST \n\u00a0 \u00a0 -F 'auth={\"key\":\"your_api_key\",\"secret\":\"your_api_secret\"}' \n\u00a0 \u00a0 -F 'file=@local_file.jpg' \n\u00a0 \u00a0 -F 'params={\"compression_type\":\"lossy\"}' \n\u00a0 \u00a0 '&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/api.imagerecycle.com\/v1\/images\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;api&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;imagerecycle&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;v1&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;images&lt;\/span&gt;&lt;\/a&gt;'<\/code><\/pre>\n<p>Y aqu\u00ed est\u00e1 la ayuda del equipo de soporte de <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a>. Gracias por las prontas respuestas:<\/p>\n<blockquote>\n<p>Si desea enviar una imagen almacenada en su servidor, no es una simple consulta POST, debe enviar una consulta POST con el tipo de contenido multipart\/form-data.<br \/>\nCon curl puedes hacer eso usando la opci\u00f3n -F en lugar de la opci\u00f3n -d.<br \/>\nTambi\u00e9n debe especificar con el par\u00e1metro es un archivo usando una @ antes del nombre del archivo.<br \/>\nSi desea obtener m\u00e1s informaci\u00f3n, est\u00e1 documentado en la p\u00e1gina manual de curl disponible en l\u00ednea: <a href=\"https:\/\/curl.haxx.se\/docs\/manpage.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http:\/\/curl.haxx.se\/docs\/manpage.html<\/a><\/p>\n<p>Aqu\u00ed est\u00e1 la l\u00ednea de comando que debe usar:<\/p>\n<p>curl -X POST -F &#8216;auth={\u00abkey&quot;:&quot;your_api_key\u00bb,\u00bbsecret\u00bb:\u00bbyour_api_secret\u00bb}&#8217; -F &#8216;file=@the_file_to_send.png&#8217; -F &#8216;params={\u00abcompression_type\u00bb:\u00bblossy\u00bb }&#8217; &#8216; <a href=\"https:\/\/api.imagerecycle.com\/v1\/images\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/api.imagerecycle.com\/v1\/images<\/a> &#8216;<\/p>\n<p>Puede usar los par\u00e1metros<br \/>: tipo_compresi\u00f3n\u00bb:\u00bbcon p\u00e9rdida\u00bb o tipo_compresi\u00f3n\u00bb:\u00bbsin p\u00e9rdida\u00bb para compresi\u00f3n sin p\u00e9rdida o con p\u00e9rdida<br \/>\n\u2013 \u00abredimensionar\u00bb:{\u00abancho\u00bb:100,\u00bbalto\u00bb:100} para cambiar el tama\u00f1o de la imagen si es necesario. puede especificar solo con o altura<\/p>\n<p>En este caso la solicitud ser\u00eda:<\/p>\n<p>curl -X POST -F &#8216;auth={\u00abkey\u00bb:\u00bbyour_api_key\u00bb,\u00bbsecret\u00bb:\u00bbyour_api_secret\u00bb}&#8217; -F &#8216;file=@the_file_to_send.png&#8217; -F &#8216;params={\u00abcompression_type\u00bb:\u00bblossy\u00bb ,\u00bbredimensionar\u00bb:{\u00abancho\u00bb:100,\u00bbalto\u00bb:100} }&#8217; &#8216; <a href=\"https:\/\/api.imagerecycle.com\/v1\/images\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/api.imagerecycle.com\/v1\/images<\/a> &#8216;<\/p>\n<\/blockquote>\n<p>Entonces, podemos escribir un <a href=\"https:\/\/helloacm.com\/php-script-to-test-crontab\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">script PHP<\/a>, como el siguiente para optimizar las im\u00e1genes locales (reducir el tama\u00f1o del archivo sin tocar las dimensiones, las im\u00e1genes o el <a href=\"https:\/\/helloacm.com\/how-to-put-signature-on-pdf-documentfile\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PDF<\/a> ).<\/p>\n<ol>\n<li>ENV\u00cdE la imagen\/pdf local al servidor <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a> usando POST\/API de im\u00e1genes<\/li>\n<li>Cambie el nombre de la imagen\/pdf local para tener una copia de seguridad<\/li>\n<li>Descargue el archivo comprimido de <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a><\/li>\n<\/ol>\n<p>Aqu\u00ed est\u00e1 la captura de pantalla, aseg\u00farese de reemplazar app_key y app_seret.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a68413d.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a68413d.jpg\" alt=\"\u00bfC\u00f3mo comprimir im\u00e1genes usando la API ImageRecycle (el script PHP)?\"><\/a><\/p>\n<p>imagerecycle-image-compression<\/p>\n<p>Y el servidor confirma esta optimizaci\u00f3n desde el panel [Historial de optimizaci\u00f3n].<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a7b5094.jpg\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-155144-61e556a7b5094.jpg\" alt=\"\u00bfC\u00f3mo comprimir im\u00e1genes usando la API ImageRecycle (el script PHP)?\"><\/a><\/p>\n<p>imagerecycle-image-compression-history<\/p>\n<p>Tengo un test.jpg que est\u00e1 optimizado de 1,7 M a 1,6 M. Puede que no sea mucho y si elijo otras configuraciones, podr\u00eda ahorrar m\u00e1s (como cambiar el tama\u00f1o). [Escribir\u00e9 <a href=\"https:\/\/wordpress.mediadoma.com\/es\/comparando-imagerecycle-e-imagfy-cual-es-mejor\/\" title=\"otra publicaci\u00f3n\">otra publicaci\u00f3n<\/a> sobre la revisi\u00f3n de <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a> y otros competidores como <a href=\"https:\/\/wordpress.mediadoma.com\/es\/uso-del-complemento-imagify-wordpress-para-reducir-el-tamano-de-las-imagenes\/\" title=\"Imagefy\">Imagefy<\/a>.<\/p>\n<p>El c\u00f3digo fuente completo:<\/p>\n<pre><code>#!\/usr\/bin\/php\n&lt;?php\n\/\/ Author: \u00a0&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/helloacm.com\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;helloacm&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;\/a&gt;\n\u00a0 $key = \"app_key\";\n\u00a0 $secret = \"app_secret\";\n\u00a0 \n\u00a0 function ImageRecycle($img, $key, $secret) { \u00a0\n\u00a0 \u00a0 $cmd = \"curl -X POST -F 'auth={\"key\":\"$key\",\"secret\":\"$secret\"}' -F 'file=@$img' -F 'params={\"compression_type\":\"lossy\"}' '&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/api.imagerecycle.com\/v1\/images\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;api&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;imagerecycle&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;v1&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;images&lt;\/span&gt;&lt;\/a&gt;'\";\n\u00a0 \u00a0 echo $cmd. \"n\"; \u00a0 \u00a0\n\u00a0 \u00a0 $rtn = json_decode(shell_exec($cmd), true);\n\u00a0 \u00a0 var_dump($rtn);\n\u00a0 \u00a0 $err = 201;\n\u00a0 \u00a0 if (isset($rtn['errCode'])) {\n\u00a0 \u00a0 \u00a0 $err = (integer)$rtn['errCode'];\n\u00a0 \u00a0 }\n\u00a0 \u00a0 $id = 0;\n\u00a0 \u00a0 if (isset($rtn['id'])) {\n\u00a0 \u00a0 \u00a0 $id = (integer)$rtn['id'];\n\u00a0 \u00a0 }\n\u00a0 \u00a0 if (($err == 201) || ($id &gt; 0)) {\n\u00a0 \u00a0 \u00a0 $optimized_url = $rtn['optimized_url'];\n\u00a0 \u00a0 \u00a0 if (strlen($optimized_url)) {\n\u00a0 \u00a0 \u00a0 \u00a0 echo \"Renaming original $img to ${img}_original n\";\n\u00a0 \u00a0 \u00a0 \u00a0 rename($img, $img.\"_original\");\n\u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 echo \"Downloading $optimized_url ...n\";\n\u00a0 \u00a0 \u00a0 $optimized_content = file_get_contents($optimized_url);\n\u00a0 \u00a0 \u00a0 echo \"Saving optimised to $img ...n\";\n\u00a0 \u00a0 \u00a0 file_put_contents($img, $optimized_content); \u00a0 \u00a0 \u00a0\n\u00a0 \u00a0 }\n\u00a0 } \u00a0\n\u00a0 \n\u00a0 foreach (array_slice($argv, 1) as $img) {\n\u00a0 \u00a0 if (!file_exists($img)) {\n\u00a0 \u00a0 \u00a0 echo $img. \" not found.n\";\n\u00a0 \u00a0 } else {\n\u00a0 \u00a0 \u00a0 ImageRecycle($img, $key, $secret);\n\u00a0 \u00a0 }\n\u00a0 } <\/code><\/pre>\n<p>Luego, ejecut\u00f3 un <a href=\"https:\/\/helloacm.com\/bash-for-loops\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ciclo bash<\/a> para iterar todas las im\u00e1genes\/ <a href=\"https:\/\/helloacm.com\/markdown-markup-language-quick-tutorial\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PDF<\/a>, lo que deber\u00eda brindarle un ahorro instant\u00e1neo.<\/p>\n<p>Logr\u00e9 <a href=\"https:\/\/helloacm.com\/case-study-use-imagerecycle-to-save-over-2gb-storage-on-vps\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ahorrar m\u00e1s de 2 GB de espacio<\/a> <a href=\"https:\/\/helloacm.com\/programmers-should-use-ssd-change-hdd-of-lenovo-laptop-to-1tb-ssd-samsung\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">SSD<\/a> en VPS usando el script anterior.<\/p>\n<p>\u00danase a <a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ImageRecycle<\/a> y use el cup\u00f3n <strong><a href=\"https:\/\/helloacm.com\/out\/imagerecycle\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">IR-PARTNER-20<\/a><\/strong> para obtener un 20 % de descuento en la primera factura, \u00a1exclusivo para mis lectores!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfC\u00f3mo comprimir im\u00e1genes usando la API ImageRecycle (el script PHP)?<\/p>\n","protected":false},"author":1,"featured_media":224801,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,747,831,914,840,861],"tags":[1172],"class_list":["post-233009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-guia-para-principiantes","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=233009"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/233009\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/224801"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=233009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=233009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=233009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}