{"id":28863,"date":"2021-06-01T20:07:00","date_gmt":"2021-06-01T17:07:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28863"},"modified":"2021-10-18T03:38:05","modified_gmt":"2021-10-18T00:38:05","slug":"jak-zoptymalizowac-obraz-podczas-przesylania-w-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/jak-zoptymalizowac-obraz-podczas-przesylania-w-php\/","title":{"rendered":"Jak zoptymalizowa\u0107 obraz podczas przesy\u0142ania w PHP"},"content":{"rendered":"<p>Ostatnio jeden z czytelnik\u00f3w zapyta\u0142 mnie, jak zoptymalizowa\u0107 obrazy podczas przesy\u0142ania w PHP. Aby odpowiedzie\u0107 na to pytanie, postanowi\u0142em napisa\u0107 artyku\u0142, kt\u00f3ry poka\u017ce, jak mo\u017cemy zmniejszy\u0107 lub skompresowa\u0107 rozmiar pliku w momencie jego wgrywania.<\/p>\n<p>Jako programista wgrywanie plik\u00f3w jest naszym sta\u0142ym zadaniem. Zawsze robimy to w tradycyjny spos\u00f3b. Korzystaj\u0105c z wbudowanej funkcji <code>move_uploaded_file<\/code>przenosimy obrazy do katalogu i pozostawiamy je bez zmian. Czy zastanawiamy si\u0119 nad kilkoma kwestiami, takimi jak rozmiar przes\u0142anego obrazu? Czy za\u0142adowanie tego obrazu na stronie internetowej zajmie troch\u0119 czasu? Czy mog\u0119 zoptymalizowa\u0107 obraz bez utraty jego jako\u015bci?<\/p>\n<p>Obrazy odgrywaj\u0105 wa\u017cn\u0105 rol\u0119 w szybko\u015bci witryny. Ci\u0119\u017ckie obrazy spowalniaj\u0105 szybko\u015b\u0107 strony, co w rezultacie powoduje utrat\u0119 odbiorc\u00f3w i ruchu. Ta sytuacja nie jest przyst\u0119pna. Dok\u0142adamy wszelkich stara\u0144, aby zbudowa\u0107 widowni\u0119 i ruch. Tak wi\u0119c dobr\u0105 praktyk\u0105 jest optymalizacja obrazu podczas przesy\u0142ania.<\/p>\n<p>W tym artykule zamierzam wykorzysta\u0107 us\u0142ug\u0119 <a href=\"https:\/\/tinypng.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a> do optymalizacji obraz\u00f3w. Za chwil\u0119 napiszemy do niego kod. Tymczasem poni\u017cej znajduje si\u0119 zrzut ekranu z tinypng.com, aby zwizualizowa\u0107 r\u00f3\u017cnic\u0119 mi\u0119dzy oryginalnym a zoptymalizowanym obrazem.<\/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=\"Jak zoptymalizowa\u0107 obraz podczas przesy\u0142ania w PHP\" ><\/a><\/p>\n<h3>U\u017cyj TinyPNG do optymalizacji obrazu podczas przesy\u0142ania<\/h3>\n<p>Aby rozpocz\u0105\u0107, musisz zainstalowa\u0107 bibliotek\u0119 TinyPNG. Zainstaluj bibliotek\u0119 za pomoc\u0105 poni\u017cszego polecenia.<\/p>\n<pre><code>composer require tinify\/tinify<\/code><\/pre>\n<p>Po zainstalowaniu biblioteki pobierz klucz API ze strony <a href=\"https:\/\/tinypng.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">TinyPNG<\/a>.<\/p>\n<p><strong>Uwaga<\/strong>: TinyPNG pozwala na kompresj\u0119 500 obraz\u00f3w za darmo miesi\u0119cznie. Za ponad 500 zdj\u0119\u0107 musisz im zap\u0142aci\u0107. Je\u015bli prowadzisz ma\u0142\u0105 witryn\u0119 internetow\u0105, ten limit jest wystarczaj\u0105cy.<\/p>\n<p>Kiedy ju\u017c b\u0119dziesz gotowy z kluczem API, zacznijmy od kodu. Tworz\u0119 prosty formularz HTML, kt\u00f3ry zawiera dane wej\u015bciowe pliku i przycisk przesy\u0142ania.<\/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>Gdy u\u017cytkownicy przesy\u0142aj\u0105 obraz za pomoc\u0105 tego formularza, programi\u015bci pisz\u0105 poni\u017cszy rodzaj kodu, aby przenie\u015b\u0107 przes\u0142any obraz na serwer.<\/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>Powy\u017cszy kod jest poprawny i nie ma w nim \u017cadnego problemu poza brakuj\u0105c\u0105 cz\u0119\u015bci\u0105 optymalizacji obrazu. Aby zoptymalizowa\u0107 obrazy, wystarczy doda\u0107 2 wiersze kodu po <code>move_uploaded_file<\/code>instrukcji.<\/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>Powy\u017csze 2 linie pobieraj\u0105 obraz ze \u015bcie\u017cki \u017ar\u00f3d\u0142owej, optymalizuj\u0105 go za pomoc\u0105 biblioteki TinyPNG bez utraty jako\u015bci i zapisuj\u0105 z powrotem w tej samej \u015bcie\u017cce \u017ar\u00f3d\u0142owej. Innymi s\u0142owy, zast\u0119puje oryginalny obraz zoptymalizowan\u0105 wersj\u0105.<\/p>\n<p>Nasz ostateczny kod jest nast\u0119puj\u0105cy.<\/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>\u015amia\u0142o i spr\u00f3buj. Powiniene\u015b zobaczy\u0107, jak zoptymalizowana wersja obrazu jest przechowywana w twoim katalogu.<\/p>\n<p>Mam nadziej\u0119, \u017ce rozumiesz, jak zoptymalizowa\u0107 obraz podczas przesy\u0142ania w PHP. Chcia\u0142bym us\u0142ysze\u0107 wasze przemy\u015blenia i sugestie w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/tinypng-kompresuj-obrazy-za-pomoca-php\/\" title=\"TinyPNG Kompresuj obrazy za pomoc\u0105 PHP\">TinyPNG Kompresuj obrazy za pomoc\u0105 PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/przeslij-i-skompresuj-wiele-obrazow-w-php\/\" title=\"Prze\u015blij i skompresuj wiele obraz\u00f3w w PHP\">Prze\u015blij i skompresuj wiele obraz\u00f3w w PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-przesylac-i-kompresowac-obrazy-w-laravel\/\" title=\"Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel\">Przewodnik po przesy\u0142aniu i kompresowaniu obraz\u00f3w w Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym artykule poka\u017c\u0119, jak zoptymalizowa\u0107 obraz przy wgrywaniu w PHP za pomoc\u0105 biblioteki TinyPNG. Obrazy odgrywaj\u0105 w serwisie bardzo wa\u017cn\u0105 rol\u0119.<\/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":[277],"tags":[847],"class_list":["post-28863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=28863"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/28863\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/21612"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=28863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=28863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=28863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}