{"id":28096,"date":"2021-06-01T19:56:00","date_gmt":"2021-06-01T16:56:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28096"},"modified":"2021-10-18T04:05:25","modified_gmt":"2021-10-18T01:05:25","slug":"como-otimizar-a-imagem-ao-fazer-upload-em-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/como-otimizar-a-imagem-ao-fazer-upload-em-php\/","title":{"rendered":"Como otimizar a imagem ao fazer upload em PHP"},"content":{"rendered":"<p>Recentemente, um dos leitores me perguntou como otimizar imagens no upload em PHP. Para responder \u00e0 pergunta, decidi escrever um artigo que mostrar\u00e1 como podemos reduzir ou compactar o tamanho do arquivo no momento de envi\u00e1-lo.<\/p>\n<p>Como um desenvolvedor, o upload de arquivos \u00e9 nossa tarefa normal. Sempre o fazemos da forma tradicional. Usando a fun\u00e7\u00e3o integrada <code>move_uploaded_file<\/code>, movemos as imagens para o diret\u00f3rio e as deixamos como est\u00e3o. Pensamos em alguns pontos, como qual \u00e9 o tamanho da imagem enviada? Esta imagem demorar\u00e1 para carregar em um site? Posso otimizar uma imagem sem perder sua qualidade?<\/p>\n<p>As imagens desempenham um papel importante na velocidade do site. Imagens pesadas diminuem a velocidade da p\u00e1gina, o que resulta na perda de p\u00fablico e tr\u00e1fego. Esta situa\u00e7\u00e3o n\u00e3o \u00e9 acess\u00edvel. N\u00f3s nos esfor\u00e7amos muito para construir o p\u00fablico e o tr\u00e1fego. Portanto, como uma boa pr\u00e1tica, voc\u00ea deve otimizar a imagem durante o upload.<\/p>\n<p>Neste artigo, vou usar o servi\u00e7o <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a> para otimizar as imagens. Vamos escrever um c\u00f3digo para ele em instantes. Enquanto isso, abaixo est\u00e1 a captura de tela do tinypng.com para visualizar a diferen\u00e7a entre a imagem original e a otimizada.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20382-6081e8cbba932.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20382-6081e8cbba932.png\" alt=\"Como otimizar a imagem ao fazer upload em PHP\" ><\/a><\/p>\n<h3>Use o TinyPNG para otimizar a imagem no upload<\/h3>\n<p>Para come\u00e7ar, voc\u00ea precisa instalar a biblioteca TinyPNG. Instale a biblioteca usando o comando abaixo.<\/p>\n<pre><code>composer require tinify\/tinify<\/code><\/pre>\n<p>Depois de instalar a biblioteca, obtenha sua chave API no site <a href=\"https:\/\/tinypng.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a>.<\/p>\n<p><strong>Nota<\/strong>: TinyPNG permite compactar 500 imagens gr\u00e1tis por m\u00eas. Por mais de 500 imagens, voc\u00ea precisa pag\u00e1-las. Se voc\u00ea estiver executando um pequeno site, essa cota \u00e9 suficiente.<\/p>\n<p>Quando estiver pronto com a chave API, vamos come\u00e7ar com o c\u00f3digo. Estou criando um formul\u00e1rio HTML simples que cont\u00e9m entrada de arquivo e um bot\u00e3o de envio.<\/p>\n<pre><code>&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"myfile\" accept=\"image\/*\" required \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" name=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Quando os usu\u00e1rios carregam uma imagem usando este formul\u00e1rio, os desenvolvedores escrevem o tipo de c\u00f3digo abaixo para mover a imagem carregada no servidor.<\/p>\n<pre><code>if (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$allowed_mime_types = array('image\/gif', 'image\/jpg', 'image\/jpeg', 'image\/png');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['myfile']['type'], $allowed_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'Invalid file format.';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!file_exists(getcwd().'\/uploads')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mkdir(getcwd().'\/uploads', 0777);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$src_file_name = $_FILES['myfile']['name'];\n\u00a0\u00a0\u00a0\u00a0move_uploaded_file($_FILES['myfile']['tmp_name'], getcwd().'\/uploads\/'.$src_file_name);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0echo \"File uploaded successfully\";\n}<\/code><\/pre>\n<p>O c\u00f3digo acima est\u00e1 correto e n\u00e3o h\u00e1 nenhum problema nele, exceto a parte que falta na otimiza\u00e7\u00e3o da imagem. Para otimizar imagens, voc\u00ea s\u00f3 precisa adicionar 2 linhas de c\u00f3digo ap\u00f3s a <code>move_uploaded_file<\/code>instru\u00e7\u00e3o.<\/p>\n<pre><code>\/\/optimize image using TinyPNG\n$source = TinifyfromFile(getcwd().'\/uploads\/'.$src_file_name);\n$source-&gt;toFile(getcwd().'\/uploads\/'.$src_file_name);<\/code><\/pre>\n<p>As 2 linhas acima pegam uma imagem do caminho de origem, otimizam-na com a biblioteca TinyPNG sem perder qualidade e salvam-na de volta no mesmo caminho de origem. Em outras palavras, ele substitui a imagem original pela vers\u00e3o otimizada.<\/p>\n<p>Nosso c\u00f3digo final \u00e9 o seguinte.<\/p>\n<pre><code>&lt;?php\nrequire_once(\"vendor\/autoload.php\");\n\u00a0\nTinifysetKey(\"TINYPNG_API_KEY\"); \/\/pass your actual API key\n\u00a0\nif (isset($_POST['submit'])) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$allowed_mime_types = array('image\/gif', 'image\/jpg', 'image\/jpeg', 'image\/png');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!in_array($_FILES['myfile']['type'], $allowed_mime_types)) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'Invalid file format.';\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0exit();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0if (!file_exists(getcwd().'\/uploads')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mkdir(getcwd().'\/uploads', 0777);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$src_file_name = $_FILES['myfile']['name'];\n\u00a0\u00a0\u00a0\u00a0move_uploaded_file($_FILES['myfile']['tmp_name'], getcwd().'\/uploads\/'.$src_file_name);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/\/optimize image using TinyPNG\n\u00a0\u00a0\u00a0\u00a0$source = TinifyfromFile(getcwd().'\/uploads\/'.$src_file_name);\n\u00a0\u00a0\u00a0\u00a0$source-&gt;toFile(getcwd().'\/uploads\/'.$src_file_name);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0echo \"File uploaded successfully.\";\n}\n?&gt;\n&lt;form method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;p&gt;&lt;input type=\"file\" name=\"myfile\" accept=\"image\/*\" required \/&gt;&lt;\/p&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" name=\"submit\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>V\u00e1 em frente e experimente. Voc\u00ea deve ver a vers\u00e3o otimizada da imagem sendo armazenada em seu diret\u00f3rio.<\/p>\n<p>Espero que voc\u00ea entenda como otimizar a imagem no upload em PHP. Eu gostaria de ouvir seus pensamentos e sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/tinypng-compactar-imagens-usando-php\/\" title=\"TinyPNG compactar imagens usando PHP\">TinyPNG compactar imagens usando PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/carregar-e-compactar-varias-imagens-em-php\/\" title=\"Carregar e compactar v\u00e1rias imagens em PHP\">Carregar e compactar v\u00e1rias imagens em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-fazer-upload-e-compactar-imagens-no-laravel\/\" title=\"Um Guia para Upload e Compacta\u00e7\u00e3o de Imagens no Laravel\">Um Guia para Upload e Compacta\u00e7\u00e3o de Imagens no Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Neste artigo, mostro como otimizar a imagem no upload em PHP usando a biblioteca TinyPNG. As imagens desempenham um papel muito importante no site.<\/p>\n","protected":false},"author":1,"featured_media":21612,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-28096","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28096"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28096\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21612"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}