{"id":230027,"date":"2022-12-02T18:29:00","date_gmt":"2022-12-02T15:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230027"},"modified":"2022-11-09T19:46:24","modified_gmt":"2022-11-09T16:46:24","slug":"programowa-zmiana-rozmiaru-obrazow-w-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/programowa-zmiana-rozmiaru-obrazow-w-wordpress\/","title":{"rendered":"Programowa zmiana rozmiaru obraz\u00f3w w WordPress"},"content":{"rendered":"\n<p>Je\u015bli kiedykolwiek musia\u0142e\u015b pracowa\u0107 z programow\u0105 zmian\u0105 rozmiaru obraz\u00f3w w WordPressie, by\u0107 mo\u017ce natkn\u0105\u0142e\u015b si\u0119 na funkcj\u0119 <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/image_resize\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">image_resize<\/a><\/strong>.<\/p>\n<p>Co wi\u0119cej, mo\u017cesz wiedzie\u0107, \u017ce zosta\u0142 wycofany (bior\u0105c pod uwag\u0119, \u017ce pojawia si\u0119 u g\u00f3ry ekranu):<\/p>\n<blockquote>\n<p>Ta funkcja zosta\u0142a wycofana. Zamiast tego u\u017cyj <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_image_editor\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_get_image_editor()<\/a><\/strong>.<\/p>\n<\/blockquote>\n<p>A wraz z jego deprecjacj\u0105, jak to jest w przypadku wszystkich tych, kt\u00f3rzy dobrze sobie radz\u0105 z deprecjonowaniem funkcjonalno\u015bci, nie jest bez zast\u0105pienia.<\/p>\n<p>W tym przypadku m\u00f3wimy o edytorze obraz\u00f3w WP. Jest to klasa w WordPress, kt\u00f3rej mo\u017cemy u\u017cy\u0107 do wykonania tych samych operacji, aby programowo zmieni\u0107 rozmiar obraz\u00f3w, co kiedy\u015b mogli\u015bmy z oryginaln\u0105 funkcj\u0105.<\/p>\n<p>\u017beby by\u0142o jasne, ten konkretny post nie jest pe\u0142nym samouczkiem na temat korzystania z <strong><a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_image_editor\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\"><code>WP_Image_Editor<\/code><\/a><\/strong>.<\/p>\n<\/p>\n<p>Zamiast tego jest to prosty przewodnik, jak u\u017cywa\u0107 go do zmiany rozmiaru obraz\u00f3w zamiast przestarza\u0142ej funkcji, wraz z kilkoma wyja\u015bnieniami, jak radzi\u0107 sobie z przypadkami, w kt\u00f3rych mog\u0105 wyst\u0105pi\u0107 b\u0142\u0119dy.<\/p>\n<h3>Znajdowanie obrazu do u\u017cycia<\/h3>\n<p>W zale\u017cno\u015bci od tego, co robisz, mo\u017cesz by\u0107 w stanie pobra\u0107 nazw\u0119 pliku obrazu z samego WordPressa; jednak w tym przyk\u0142adzie zamierzam po prostu zakodowa\u0107 \u015bcie\u017ck\u0119 do pliku.<\/p>\n<p>Jest to naj\u0142atwiejszy spos\u00f3b na wyja\u015bnienie, jak u\u017cywa\u0107 klasy w por\u00f3wnaniu do stycznej, jak programowo pobra\u0107 obraz, uzyska\u0107 jego \u015bcie\u017ck\u0119, wys\u0142a\u0107 go do klasy edytora i tak dalej.<\/p>\n<p>Za\u0142\u00f3\u017cmy wi\u0119c, \u017ce podana \u015bcie\u017cka do obrazka wygl\u0105da <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/96fa8bb3af0ee6fd821b3899e82d5fdb#file-00-filename-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mniej wi\u0119cej tak:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n$filename = '\/Users\/tommcfarlin\/Projects\/acme\/wp-content\/uploads\/2018\/06\/original-image.jpg';\nif (!file_exists($filename)) {\n  return;\n}<\/code><\/pre>\n<p>U\u017cywaj\u0105c tego, przechowamy go w zmiennej, kt\u00f3r\u0105 mo\u017cemy przekaza\u0107 do innej funkcji na wypadek, gdyby\u015bmy chcieli wielokrotnie operowa\u0107 na oryginalnym pliku.<\/p>\n<h3>Uzyskiwanie instancji edytora obraz\u00f3w<\/h3>\n<p>Nast\u0119pnie musisz pobra\u0107 instancj\u0119 klasy edytora obraz\u00f3w, aby m\u00f3c operowa\u0107 na obrazie znajduj\u0105cym si\u0119 na powy\u017cszej \u015bcie\u017cce. W swojej najbardziej podstawowej formie jest to nic innego jak przekazanie nazwy pliku do funkcji, a nast\u0119pnie tablicy argument\u00f3w.<\/p>\n<p>W tym po\u015bcie nie zajmuj\u0119 si\u0119 tablic\u0105 argument\u00f3w \u2013 tylko pobraniem instancji edytora, za pomoc\u0105 kt\u00f3rej mog\u0119 zmieni\u0107 rozmiar obrazu.<\/p>\n<p>Aby pobra\u0107 instancj\u0119 wspomnianego edytora, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/96fa8bb3af0ee6fd821b3899e82d5fdb#file-01-get-editor-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">po prostu zr\u00f3b to:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Grab the editor for the filename of the image. \n$filename = '\/Users\/tommcfarlin\/Projects\/acme\/wp-content\/uploads\/2018\/06\/original-image.jpg';\nif (!file_exists($filename)) {\n  return;\n}\n\n$editor = wp_get_image_editor( $filename, array() );<\/code><\/pre>\n<p>Spowoduje to zwr\u00f3cenie instancji edytora instancji <code>**[WP_Error](https:\/\/developer.wordpress.org\/reference\/classes\/wp_error\/)**<\/code>(wraz z komunikatem o b\u0142\u0119dzie i innymi informacjami, kt\u00f3rych mo\u017cesz u\u017cy\u0107 do okre\u015blenia problemu). Zawsze dobrze jest sprawdzi\u0107, czy zwracana warto\u015b\u0107 jest b\u0142\u0119dem i <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/96fa8bb3af0ee6fd821b3899e82d5fdb#file-02-check-for-errors-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zatrzyma\u0107 wszelkie przysz\u0142e operacje.<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Grab the editor for the file and the size of the original image.\n$filename = '\/Users\/tommcfarlin\/Projects\/acme\/wp-content\/uploads\/2018\/06\/original-image.jpg';\nif (!file_exists($filename)) {\n  return;\n}\n\n$editor = wp_get_image_editor( $filename, array() );\nif (is_wp_error($editor)) {\n   \/\/ handle the problem however you deem necessary.\n}<\/code><\/pre>\n<p>Zak\u0142adaj\u0105c jednak, \u017ce nie ma b\u0142\u0119du, mo\u017cesz rozpocz\u0105\u0107 prac\u0119 nad zmian\u0105 rozmiaru obrazu.<\/p>\n<h3>Zmiana rozmiaru obrazu<\/h3>\n<p>Na szcz\u0119\u015bcie jest to \u0142atwe. Potrzebujesz trzech informacji:<\/p>\n<ol>\n<li>szeroko\u015b\u0107,<\/li>\n<li>wzrost,<\/li>\n<li>i czy chcesz przyci\u0105\u0107 obraz.<\/li>\n<\/ol>\n<p>Z mojego do\u015bwiadczenia wynika, \u017ce \u200b\u200bprzycinanie obrazu jest prawie zawsze lepsze ni\u017c nie, poniewa\u017c pozwala unikn\u0105\u0107 dziwnego rozci\u0105gania lub zniekszta\u0142cania w dziwnych proporcjach.<\/p>\n<p>Podczas zmiany rozmiaru obrazu zawsze lubi\u0119 uzyska\u0107 aktualny rozmiar obrazu, a nast\u0119pnie u\u017cy\u0107 mno\u017cnika, aby utworzy\u0107 nowe wymiary, wed\u0142ug kt\u00f3rych chc\u0119 zmieni\u0107 rozmiar obrazu.<\/p>\n<p>Za\u0142\u00f3\u017cmy na przyk\u0142ad, \u017ce mam obraz i chc\u0119 zmieni\u0107 rozmiar o 40%, a wysoko\u015b\u0107 o 30%. Aby to zrobi\u0107, musz\u0119:<\/p>\n<ol>\n<li>uzyska\u0107 rozmiar aktualnego obrazu,<\/li>\n<li>u\u017cyj nowej szeroko\u015bci i wysoko\u015bci, aby zmieni\u0107 rozmiar obrazu.<\/li>\n<\/ol>\n<p>Programowo <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/96fa8bb3af0ee6fd821b3899e82d5fdb#file-03-sizing-the-image-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">mo\u017cesz to zrobi\u0107 w nast\u0119puj\u0105cy spos\u00f3b:<\/a><\/strong><\/p>\n<pre><code>&lt;?php\n\n\/\/ Grab the editor for the file and the size of the original image.\n$filename = '\/Users\/tommcfarlin\/Projects\/acme\/wp-content\/uploads\/2018\/06\/original-image.jpg';\nif (!file_exists($filename)) {\n  return;\n}\n\n$editor = wp_get_image_editor( $filename, array() );\nif (is_wp_error($editor)) {\n   \/\/ Handle the problem however you deem necessary.\n}\n\n\/\/ Get the dimensions for the size of the current image.\n$dimensions = $editor-&gt;get_size();\n$width = $dimensions['width'];\n$height = $dimensions['height'];\n\n\/\/ Calculate the new dimensions for the image.\n$newWidth = 0.4 * $width;\n$newHeight = 0.3 * $height;\n\n\/\/ Resize the image.\n$result = $editor-&gt;resize($newWidth, $newHeight, true);<\/code><\/pre>\n<p>Wystarczaj\u0105co \u0142atwe do na\u015bladowania, prawda?<\/p>\n<h3>Zapisywanie obrazu<\/h3>\n<p>Na koniec jedyne, co pozosta\u0142o, to zapisanie obrazu. W takim przypadku obraz <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/96fa8bb3af0ee6fd821b3899e82d5fdb#file-04-saving-the-image-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">zostanie zapisany<\/a><\/strong> w katalogu uploads (i zwykle roku i miesi\u0105cu zapewnianym przez WordPress).<\/p>\n<pre><code>&lt;?php\n\n\/\/ Grab the editor for the file and the size of the original image.\n$filename = '\/Users\/tommcfarlin\/Projects\/acme\/wp-content\/uploads\/2018\/06\/original-image.jpg';\nif (!file_exists($filename)) {\n  return;\n}\n\n$editor = wp_get_image_editor( $filename, array() );\nif (is_wp_error($editor)) {\n   \/\/ handle the problem however you deem necessary.\n}\n\n\/\/ Get the dimensions for the size of the current image.\n$dimensions = $editor-&gt;get_size();\n$width = $dimensions['width'];\n$height = $dimensions['height'];\n\n\/\/ Calculate the new dimensions for the image.\n$newWidth = 0.4 * $width;\n$newHeight = 0.3 * $height;\n\n\/\/ Resize the image.\n$result = $editor-&gt;resize($newWidth, $newHeight, true);\n\n\/\/ If there's no problem, save it; otherwise, print the problem.\nif (!is_wp_error($result)) {\n  $editor-&gt;save($editor-&gt;generate_filename());\n} else {\n   \/\/ Handle the problem however you deem necessary.\n}<\/code><\/pre>\n<p>Nast\u0119pnie mo\u017cesz zobaczy\u0107 ostateczn\u0105 wersj\u0119 zmienion\u0105 (i odpowiednio nazwan\u0105) na podstawie jej danych wyj\u015bciowych.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ten post zawiera kr\u00f3tki, prosty przewodnik dotycz\u0105cy korzystania z Edytora obraz\u00f3w WP do programowej zmiany rozmiaru obraz\u00f3w.<\/p>\n","protected":false},"author":1,"featured_media":163264,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,845,866],"tags":[1169],"class_list":["post-230027","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=230027"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/230027\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/163264"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=230027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=230027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=230027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}