{"id":24764,"date":"2021-05-25T11:10:00","date_gmt":"2021-05-25T08:10:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24764"},"modified":"2021-10-17T20:41:04","modified_gmt":"2021-10-17T17:41:04","slug":"luo-pikkukuva-laraveliin-kayttamalla-interventiokuvakirjastoa","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/luo-pikkukuva-laraveliin-kayttamalla-interventiokuvakirjastoa\/","title":{"rendered":"Luo pikkukuva Laraveliin k\u00e4ytt\u00e4m\u00e4ll\u00e4 Interventiokuvakirjastoa"},"content":{"rendered":"<p>Verkkosivustolla k\u00e4sittelemme aina kuvia. Vaatimuksen perusteella k\u00e4yt\u00e4mme eri kuvaversioita. Kehitt\u00e4jille on hyv\u00e4 tapa luoda erilaisia \u200b\u200bversioita eli pikkukuvia yhdest\u00e4 kuvasta. N\u00e4it\u00e4 pikkukuvia voidaan k\u00e4ytt\u00e4\u00e4 n\u00e4ytett\u00e4ess\u00e4 erikokoisia kuvia s\u00e4ili\u00f6n koosta riippuen. S\u00e4ili\u00f6n koon mukaan sopivan kuvan n\u00e4ytt\u00e4minen s\u00e4\u00e4st\u00e4\u00e4 kaistanleveytt\u00e4 ja parantaa sivun latausaikaa. Suurikokoisen kuvan n\u00e4ytt\u00e4minen pieness\u00e4 s\u00e4ili\u00f6ss\u00e4 on huono k\u00e4yt\u00e4nt\u00f6 ja vaarantaa sivun latausajan. Tuloksena on suositeltavaa luoda kuvasta useita pikkukuvia ja k\u00e4ytt\u00e4\u00e4 aina sopivaa versiota.<\/p>\n<p>T\u00e4ss\u00e4 artikkelissa tutkitaan, kuinka luoda pikkukuva Laraveliin Intervention Image -kirjaston avulla. <a href=\"http:\/\/image.intervention.io\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Interventiokuva<\/a> on ilmainen ja yksi suosituimmista kuvank\u00e4sittelykirjastoista. Taustalla t\u00e4m\u00e4 kirjasto k\u00e4ytt\u00e4\u00e4 GD-kirjastoa ja Imagickia kuvank\u00e4sittelyyn.<\/p>\n<p>T\u00e4t\u00e4 opetusohjelmaa varten luon kolme pikkukuvaa &#8211; pienet, keskisuuret, suuret koot 150 93, 300 * 185, 550 340. Muuta n\u00e4it\u00e4 kokoja vaatimuksesi mukaan.<\/p>\n<h3>P\u00e4\u00e4st\u00e4 alkuun<\/h3>\n<p>Aloittamiseksi sinun on ensin asennettava Intervention Image -kirjasto Laraveliin. Avaa p\u00e4\u00e4te projektin juurihakemistossa ja suorita alla oleva komento:<\/p>\n<pre><code>composer require intervention\/image<\/code><\/pre>\n<p>Kun olet asentanut kirjaston, avaa <code>config\/app.php<\/code>tiedosto ja lis\u00e4\u00e4 siihen seuraavat rivit.<\/p>\n<p>Lis\u00e4\u00e4 t\u00e4m\u00e4n paketin palveluntarjoajat <code>$providers<\/code>matriisiin.<\/p>\n<pre><code>InterventionImageImageServiceProvider::class<\/code><\/pre>\n<p>Lis\u00e4\u00e4 julkisivu <code>$aliases<\/code>taulukkoon.<\/p>\n<pre><code>'Image' =&gt; InterventionImageFacadesImage::class<\/code><\/pre>\n<p>Seuraavaksi, jotta voimme tallentaa kuvat, meid\u00e4n on luotava hakemisto. Siirry p\u00e4\u00e4telaitteeseen ja suorita komento seuraavasti:<\/p>\n<pre><code>php artisan storage:link<\/code><\/pre>\n<p>T\u00e4m\u00e4 komento luo tallennushakemiston (symbolinen linkki) julkiseen kansioon. L\u00e4het\u00e4n t\u00e4h\u00e4n kansioon alkuper\u00e4isen kuvan ja sen pikkukuvat.<\/p>\n<h3>Luo pikkukuva Laraveliin<\/h3>\n<p>Olemme kaikki asettaneet perusasetukset ja voimme nyt kirjoittaa todellisen koodin. Luodaan lomake n\u00e4kym\u00e4tiedostoon.<\/p>\n<pre><code>&lt;form action=\"{{ url('PASS_ACTION_URL') }}\" method=\"post\" enctype=\"multipart\/form-data\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"exampleInputFile\"&gt;File input&lt;\/label&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"file\" name=\"profile_image\" id=\"exampleInputFile\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0{{ csrf_field() }}\n\u00a0\u00a0\u00a0\u00a0&lt;button type=\"submit\" class=\"btn btn-default\"&gt;Submit&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<p>Ohjaimessa sinun on lis\u00e4tt\u00e4v\u00e4 kirjaston julkisivu &#8217;Image&#8217;, jonka olemme lis\u00e4nneet <code>config\/app.php<\/code>tiedostoon.<\/p>\n<pre><code>&lt;?php\n\u00a0\u00a0\nnamespace AppHttpControllers;\n\u00a0\u00a0\nuse IlluminateHttpRequest;\nuse Image;\n\u00a0\u00a0\nclass ImageController extends Controller\n{\n\u00a0\u00a0\n}<\/code><\/pre>\n<p>Lis\u00e4\u00e4m\u00e4ll\u00e4 julkisivu voimme kutsua Intervention Image -kirjaston toimintoja. L\u00e4het\u00e4n alla olevan koodin kuvan kahteen paikkaan. Alkuper\u00e4inen kuva menee suoraan <code>storage\/profile_images<\/code>kansion sis\u00e4\u00e4n. Pikkukuvat tallennetaan <code>storage\/profile_images\/thumbnail<\/code>hakemistoon. L\u00e4het\u00e4mme alkuper\u00e4isen kuvan ensin pikkukansioon ja muutamme sen kokoa.<\/p>\n<pre><code>public function store(Request $request)\n{\n\u00a0\u00a0\u00a0\u00a0if($request-&gt;hasFile('profile_image')) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename with extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenamewithextension = $request-&gt;file('profile_image')-&gt;getClientOriginalName();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get filename without extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/get file extension\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$extension = $request-&gt;file('profile_image')-&gt;getClientOriginalExtension();\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/filename to store\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$filenametostore = $filename.'_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/small thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$smallthumbnail = $filename.'_small_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/medium thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$mediumthumbnail = $filename.'_medium_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/large thumbnail name\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$largethumbnail = $filename.'_large_'.time().'.'.$extension;\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/Upload File\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images', $filenametostore);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $smallthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $mediumthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$request-&gt;file('profile_image')-&gt;storeAs('public\/profile_images\/thumbnail', $largethumbnail);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create small thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$smallthumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$smallthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($smallthumbnailpath, 150, 93);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create medium thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$mediumthumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$mediumthumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($mediumthumbnailpath, 300, 185);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/create large thumbnail\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$largethumbnailpath = public_path('storage\/profile_images\/thumbnail\/'.$largethumbnail);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;createThumbnail($largethumbnailpath, 550, 340);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect('image')-&gt;with('success', \"Image uploaded successfully.\");\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Yll\u00e4 olevaan koodiin tallennan kuvan kolmella pienell\u00e4, keskisuurella ja suurella formaatilla. Niiden tallentamisen j\u00e4lkeen kutsumme menetelm\u00e4\u00e4 <code>createThumbnail<\/code>ja v\u00e4lit\u00e4mme vaaditun leveyden, korkeuden menetelm\u00e4\u00e4n. M\u00e4\u00e4ritet\u00e4\u00e4n t\u00e4m\u00e4 funktio alla. T\u00e4m\u00e4n toiminnon tulisi siirty\u00e4 samaan ohjaimeen.<\/p>\n<pre><code>\/**\n\u00a0* Create a thumbnail of specified size\n\u00a0*\n\u00a0* @param string $path path of thumbnail\n\u00a0* @param int $width\n\u00a0* @param int $height\n\u00a0*\/\npublic function createThumbnail($path, $width, $height)\n{\n\u00a0\u00a0\u00a0\u00a0$img = Image::make($path)-&gt;resize($width, $height, function ($constraint) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0$img-&gt;save($path);\n}<\/code><\/pre>\n<p>T\u00e4ss\u00e4 muutamme kuvan kokoa suhteellisesti. N\u00e4in pid\u00e4mme kuvasuhteen ennallaan, eik\u00e4 kuva leikkaa.<\/p>\n<p>Jos etsit kovaa satoa, vaihda alla olevat viivat<\/p>\n<pre><code>$img = Image::make($path)-&gt;resize($width, $height, function ($constraint) {\n\u00a0\u00a0\u00a0\u00a0$constraint-&gt;aspectRatio();\n});\n$img-&gt;save($path);<\/code><\/pre>\n<p>Kanssa<\/p>\n<pre><code>$img = Image::make($path)-&gt;resize($width, $height)-&gt;save($path);<\/code><\/pre>\n<p>Toivon, ett\u00e4 ymm\u00e4rr\u00e4t kuinka luoda pikkukuva Laraveliin Intervention Image -kirjastolla. Haluaisin kuulla ajatuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/muuta-kuvan-kokoa-laravelissa-kayttamalla-interventiokuvakirjastoa\/\" title=\"Muuta kuvan kokoa Laravelissa k\u00e4ytt\u00e4m\u00e4ll\u00e4 interventiokuvakirjastoa\">Muuta kuvan kokoa Laravelissa k\u00e4ytt\u00e4m\u00e4ll\u00e4 interventiokuvakirjastoa<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-ladata-ja-pakata-kuvia-laravelissa\/\" title=\"Opas kuvien lataamiseen ja pakkaamiseen Laravelissa\">Opas kuvien lataamiseen ja pakkaamiseen Laravelissa<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/lataa-ja-muuta-useita-kuvia-laravelissa\/\" title=\"Lataa ja muuta useita kuvia Laravelissa\">Lataa ja muuta useita kuvia Laravelissa<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko luoda pikkukuvan Laraveliin, kun lataat kuvaa? T\u00e4ss\u00e4 artikkelissa tutkitaan, kuinka voit luoda useita pikkukuvia Intervention Image -sovelluksella<\/p>\n","protected":false},"author":1,"featured_media":21673,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[499],"tags":[843],"class_list":["post-24764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=24764"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/24764\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/21673"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=24764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=24764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=24764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}