{"id":30978,"date":"2025-10-04T07:01:23","date_gmt":"2025-10-04T04:01:23","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/"},"modified":"2025-10-04T07:01:23","modified_gmt":"2025-10-04T04:01:23","slug":"resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/","title":{"rendered":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma"},"content":{"rendered":"<p><body><\/p>\n<p>Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, internet sitelerinin h\u0131z\u0131 ve performans\u0131, kullan\u0131c\u0131 deneyimi ve arama motoru s\u0131ralamalar\u0131 a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sahiptir. Kullan\u0131c\u0131lar, saniyeler i\u00e7inde y\u00fcklenmeyen bir web sayfas\u0131n\u0131 terk etmeye meyillidir. Bu durum, potansiyel m\u00fc\u015fterilerin veya okuyucular\u0131n kayb\u0131na yol a\u00e7ar. Peki, bir web sayfas\u0131n\u0131n yava\u015f y\u00fcklenmesinin en yayg\u0131n nedenlerinden biri nedir? Genellikle yan\u0131t, optimize edilmemi\u015f, b\u00fcy\u00fck boyutlu resim dosyalar\u0131d\u0131r.<\/p>\n<p>Y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc foto\u011fraflar veya detayl\u0131 grafikler, web sitenize estetik bir de\u011fer katarken, ayn\u0131 zamanda ciddi bir bant geni\u015fli\u011fi t\u00fcketimine ve uzun y\u00fckleme s\u00fcrelerine neden olabilir. Bu durum, \u00f6zellikle mobil cihazlardan eri\u015fen kullan\u0131c\u0131lar i\u00e7in daha da belirgin bir sorundur. Mobil veri paketlerinin k\u0131s\u0131tl\u0131 oldu\u011fu veya internet ba\u011flant\u0131s\u0131n\u0131n yava\u015f oldu\u011fu durumlarda, b\u00fcy\u00fck resimler kullan\u0131c\u0131lar\u0131 adeta \u00e7ileden \u00e7\u0131karabilir. \u0130\u015fte tam da bu noktada, resim s\u0131k\u0131\u015ft\u0131rma devreye giriyor ve web performans\u0131n\u0131n gizli kahraman\u0131 haline geliyor. Etkili bir resim optimizasyonu, sayfa y\u00fckleme h\u0131zlar\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rarak, hem kullan\u0131c\u0131lar\u0131n sitenizde daha uzun s\u00fcre kalmas\u0131n\u0131 sa\u011flar hem de arama motorlar\u0131n\u0131n sitenizi daha olumlu de\u011ferlendirmesine yard\u0131mc\u0131 olur. Unutmay\u0131n, Google gibi arama motorlar\u0131, h\u0131zl\u0131 y\u00fcklenen sitelere \u00f6ncelik verir ve bu da SEO performans\u0131n\u0131z\u0131 do\u011frudan etkiler. Bu makalede, <b>Compressor.js<\/b> adl\u0131 g\u00fc\u00e7l\u00fc JavaScript k\u00fct\u00fcphanesi ile resimlerinizi nas\u0131l otomatik olarak belirli bir hedef boyuta s\u0131k\u0131\u015ft\u0131rabilece\u011finizi, kaliteden \u00f6d\u00fcn vermeden ve kullan\u0131c\u0131 deneyimini maksimize ederek ad\u0131m ad\u0131m \u00f6\u011frenece\u011fiz. Bu modern yakla\u015f\u0131m, resimlerinizi sunucuya y\u00fcklemeden \u00f6nce istemci taraf\u0131nda optimize etmenizi sa\u011flayarak, sunucu kaynaklar\u0131ndan tasarruf etmenize ve daha h\u0131zl\u0131 bir dosya transferi sa\u011flaman\u0131za olanak tan\u0131r. Dolay\u0131s\u0131yla, web projenizin genel performans\u0131n\u0131 art\u0131rmak i\u00e7in resim s\u0131k\u0131\u015ft\u0131rma art\u0131k bir l\u00fcks de\u011fil, bir zorunluluktur.<\/p>\n<h2>Compressor.js Nedir ve Resim S\u0131k\u0131\u015ft\u0131rma Temelleri Nelerdir?<\/h2>\n<p><b>Compressor.js<\/b>, web tabanl\u0131 uygulamalarda resim s\u0131k\u0131\u015ft\u0131rma i\u015flemini client-side (istemci taraf\u0131nda) ger\u00e7ekle\u015ftirmek i\u00e7in tasarlanm\u0131\u015f hafif ve g\u00fc\u00e7l\u00fc bir JavaScript k\u00fct\u00fcphanesidir. Genellikle, bir kullan\u0131c\u0131 dosya y\u00fckleme formu arac\u0131l\u0131\u011f\u0131yla resim g\u00f6ndermeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, bu resimler sunucuya g\u00f6nderilmeden \u00f6nce taray\u0131c\u0131da i\u015flenir ve s\u0131k\u0131\u015ft\u0131r\u0131l\u0131r. Bu, sunucuya olan y\u00fck\u00fc azalt\u0131rken, ayn\u0131 zamanda bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 optimize eder ve son kullan\u0131c\u0131n\u0131n y\u00fckleme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/p>\n<p>Resim s\u0131k\u0131\u015ft\u0131rman\u0131n temelinde, dosya boyutunu k\u00fc\u00e7\u00fcltmek i\u00e7in gereksiz verilerin kald\u0131r\u0131lmas\u0131 veya verilerin daha verimli bir \u015fekilde kodlanmas\u0131 yatar. Genel olarak iki ana s\u0131k\u0131\u015ft\u0131rma t\u00fcr\u00fc bulunur:<\/p>\n<ul>\n<li><b>Kay\u0131pl\u0131 S\u0131k\u0131\u015ft\u0131rma (Lossy Compression):<\/b> Bu y\u00f6ntemde, insan g\u00f6z\u00fcn\u00fcn fark edemeyece\u011fi detaylar ve bilgiler resimden kal\u0131c\u0131 olarak \u00e7\u0131kar\u0131l\u0131r. Bu, dosya boyutunda ciddi azalmalar sa\u011flarken, \u00e7ok d\u00fc\u015f\u00fck kalite ayarlar\u0131nda g\u00f6zle g\u00f6r\u00fcl\u00fcr bir bozulmaya yol a\u00e7abilir. JPEG (Joint Photographic Experts Group) format\u0131, kay\u0131pl\u0131 s\u0131k\u0131\u015ft\u0131rman\u0131n en bilinen \u00f6rne\u011fidir ve foto\u011fraf gibi \u00e7ok renkli, karma\u015f\u0131k g\u00f6r\u00fcnt\u00fcler i\u00e7in idealdir. Compressor.js, \u00f6zellikle JPEG s\u0131k\u0131\u015ft\u0131rma kalitesini dinamik olarak ayarlayarak hedef boyuta ula\u015fma konusunda olduk\u00e7a etkilidir.<\/li>\n<li><b>Kayps\u0131z S\u0131k\u0131\u015ft\u0131rma (Lossless Compression):<\/b> Bu y\u00f6ntem, resim kalitesinden hi\u00e7bir \u00f6d\u00fcn vermeden dosya boyutunu k\u00fc\u00e7\u00fclt\u00fcr. T\u00fcm orijinal veriler korunur ve resim defalarca s\u0131k\u0131\u015ft\u0131r\u0131l\u0131p a\u00e7\u0131lsa bile kalitesini kaybetmez. PNG (Portable Network Graphics) ve GIF (Graphics Interchange Format) bu t\u00fcr s\u0131k\u0131\u015ft\u0131rmay\u0131 kullan\u0131r. Genellikle logolar, ikonlar veya keskin hatlara sahip grafikler i\u00e7in tercih edilirler. Compressor.js, PNG format\u0131nda da s\u0131k\u0131\u015ft\u0131rma yapabilir, ancak kay\u0131pl\u0131 s\u0131k\u0131\u015ft\u0131rman\u0131n sundu\u011fu dosya boyutu avantajlar\u0131n\u0131 genellikle sa\u011flayamaz.<\/li>\n<\/ul>\n<p>Compressor.js&#8217;in temel \u00e7al\u0131\u015fma prensibi, bir <code>File<\/code> veya <code>Blob<\/code> nesnesini al\u0131p, onu bir HTML5 <code>canvas<\/code> eleman\u0131 \u00fczerinde yeniden boyutland\u0131rmak ve sonra s\u0131k\u0131\u015ft\u0131rma se\u00e7enekleriyle birlikte bir veri URL&#8217;sine veya yeni bir <code>Blob<\/code> nesnesine d\u00f6n\u00fc\u015ft\u00fcrmektir. K\u00fct\u00fcphane, \u00f6zellikle <code>quality<\/code> ve <code>targetSize<\/code> gibi parametreler arac\u0131l\u0131\u011f\u0131yla, resmin boyutunu ve kalitesini hassas bir \u015fekilde kontrol etmenizi sa\u011flar. Bu sayede, g\u00f6rsel optimizasyonu s\u00fcre\u00e7lerinizde b\u00fcy\u00fck esneklik elde edersiniz. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n y\u00fckledi\u011fi 10MB&#8217;l\u0131k bir foto\u011fraf\u0131, web siteniz i\u00e7in ideal olan 200KB&#8217;l\u0131k bir boyuta otomatik olarak indirebilirsiniz. Bu, hem depolama maliyetlerinden tasarruf etmenizi hem de son kullan\u0131c\u0131n\u0131n daha iyi bir <b>kullan\u0131c\u0131 deneyimi<\/b> ya\u015famas\u0131n\u0131 sa\u011flar.<\/p>\n<div class=\"expert-tip\" style=\"background-color: #e6f7ff; border-left: 5px solid #007bff; padding: 10px; margin: 15px 0;\">\n  Uzman \u0130pucu: Client-side s\u0131k\u0131\u015ft\u0131rma, \u00f6zellikle yava\u015f internet ba\u011flant\u0131s\u0131 olan kullan\u0131c\u0131lar i\u00e7in b\u00fcy\u00fck bir avantajd\u0131r. Resimler sunucuya gitmeden optimize edildi\u011fi i\u00e7in, upload s\u00fcresi \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131sal\u0131r. Bu da uygulaman\u0131z\u0131n genel alg\u0131lanan h\u0131z\u0131n\u0131 ve <b>web performans\u0131<\/b>n\u0131 art\u0131r\u0131r.\n<\/div>\n<h2>Compressor.js ile Hedef Boyuta Ula\u015fma Nas\u0131l M\u00fcmk\u00fcn Olur?<\/h2>\n<p>Compressor.js&#8217;in en etkileyici \u00f6zelliklerinden biri, bir resmin kalitesini otomatik olarak ayarlayarak onu belirli bir hedef boyuta (\u00f6rne\u011fin, 200 KB) s\u0131k\u0131\u015ft\u0131rma yetene\u011fidir. Bu, geleneksel s\u0131k\u0131\u015ft\u0131rma y\u00f6ntemlerinden farkl\u0131 olarak, manuel deneme yan\u0131lma ile ideal kalite ayar\u0131n\u0131 bulma zahmetini ortadan kald\u0131r\u0131r. Peki, bu sihirli s\u00fcre\u00e7 arka planda nas\u0131l i\u015fler?<\/p>\n<p>Temelde, Compressor.js&#8217;in <code>targetSize<\/code> parametresi bu i\u015flemin anahtar\u0131d\u0131r. K\u00fct\u00fcphane, bu parametreyi kullanarak iteratif (tekrarlamal\u0131) bir s\u0131k\u0131\u015ft\u0131rma algoritmas\u0131 uygular. Bu algoritma \u015fu ad\u0131mlar\u0131 takip eder:<\/p>\n<ol>\n<li><b>Ba\u015flang\u0131\u00e7 Denemesi:<\/b> Compressor.js, resminizi varsay\u0131lan veya belirtilen bir kalite (<code>quality<\/code>) de\u011feriyle (\u00f6rne\u011fin, 0.8 veya %80 kalite) s\u0131k\u0131\u015ft\u0131rmay\u0131 dener.<\/li>\n<li><b>Boyut Kontrol\u00fc:<\/b> S\u0131k\u0131\u015ft\u0131rma sonras\u0131 elde edilen dosya boyutunu, sizin belirledi\u011finiz <code>targetSize<\/code> ile kar\u015f\u0131la\u015ft\u0131r\u0131r.<\/li>\n<li><b>\u0130teratif Ayarlama:<\/b>\n<ul>\n<li>E\u011fer elde edilen boyut <code>targetSize<\/code>&#8216;dan \u00e7ok daha k\u00fc\u00e7\u00fckse, k\u00fct\u00fcphane resmin kalitesini art\u0131rarak (\u00f6rne\u011fin 0.8&#8217;den 0.85&#8217;e) yeniden s\u0131k\u0131\u015ft\u0131rmay\u0131 dener.<\/li>\n<li>E\u011fer elde edilen boyut <code>targetSize<\/code>&#8216;dan \u00e7ok daha b\u00fcy\u00fckse, k\u00fct\u00fcphane resmin kalitesini d\u00fc\u015f\u00fcrerek (\u00f6rne\u011fin 0.8&#8217;den 0.75&#8217;e) yeniden s\u0131k\u0131\u015ft\u0131rmay\u0131 dener.<\/li>\n<li>Bu ayarlama, genellikle ikili arama (binary search) benzeri bir yakla\u015f\u0131mla yap\u0131l\u0131r. Yani, optimum kalite seviyesine daha h\u0131zl\u0131 ula\u015fmak i\u00e7in aral\u0131k daralt\u0131l\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><b>Optimal Noktaya Ula\u015fma:<\/b> Bu s\u00fcre\u00e7, s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f resmin boyutu <code>targetSize<\/code>&#8216;a belirli bir tolerans marj\u0131 i\u00e7inde yakla\u015fana kadar devam eder. Tolerans, genellikle <code>targetSize<\/code>&#8216;\u0131n %5-10&#8217;u kadar olabilir, \u00e7\u00fcnk\u00fc tam olarak hedefe ula\u015fmak bazen imkans\u0131z veya \u00e7ok fazla yineleme gerektirebilir. K\u00fct\u00fcphane, bu optimal kalite noktas\u0131n\u0131 buldu\u011funda i\u015flemi sonland\u0131r\u0131r ve nihai s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f resmi d\u00f6nd\u00fcr\u00fcr.<\/li>\n<\/ol>\n<p>Bu mekanizma, \u00f6zellikle kullan\u0131c\u0131lar\u0131n y\u00fckledi\u011fi resimlerin kalitesini dinamik olarak y\u00f6netmeniz gereken durumlarda paha bi\u00e7ilmezdir. \u00d6rne\u011fin, bir foto\u011fraf galerisi uygulamas\u0131nda her resmin belirli bir dosya boyutunu a\u015fmamas\u0131n\u0131 sa\u011flamak, hem sunucu depolama alan\u0131ndan tasarruf etmenizi hem de sitenizin <b>y\u00fckleme s\u00fcreleri<\/b>ni sabit tutarak \u00f6ng\u00f6r\u00fclebilir bir <b>kullan\u0131c\u0131 deneyimi<\/b> sunman\u0131z\u0131 sa\u011flar. Bu otomatik kalite ayarlamas\u0131 sayesinde, her resim i\u00e7in ayr\u0131 ayr\u0131 elle kalite ayarlar\u0131 yapman\u0131za gerek kalmaz, Compressor.js sizin yerinize en iyi dengeyi bulur. Bu da geli\u015ftirme s\u00fcrecinizi h\u0131zland\u0131r\u0131r ve daha verimli bir i\u015f ak\u0131\u015f\u0131 sunar. \u00d6zellikle <b>g\u00f6rsel optimizasyonu<\/b>, bir web sitesinin genel sa\u011fl\u0131\u011f\u0131 i\u00e7in temel ta\u015flardan biridir.<\/p>\n<h2>Compressor.js&#8217;i Web Projenize Nas\u0131l Entegre Edersiniz? Ad\u0131m Ad\u0131m Kurulum ve Kullan\u0131m<\/h2>\n<p>Compressor.js&#8217;i web projenize entegre etmek olduk\u00e7a kolayd\u0131r. \u0130ki temel y\u00f6ntem bulunur: CDN \u00fczerinden do\u011frudan HTML dosyan\u0131za dahil etmek veya bir paket y\u00f6neticisi (npm\/yarn) arac\u0131l\u0131\u011f\u0131yla projenize eklemek. Modern web geli\u015ftirme pratikleri genellikle paket y\u00f6neticilerini tercih etse de, h\u0131zl\u0131 testler veya k\u00fc\u00e7\u00fck projeler i\u00e7in CDN kullan\u0131m\u0131 da pratik olabilir.<\/p>\n<h3>1. Kurulum Y\u00f6ntemleri<\/h3>\n<h4>a) CDN ile Kurulum<\/h4>\n<p>Bu y\u00f6ntem en h\u0131zl\u0131s\u0131d\u0131r. HTML dosyan\u0131z\u0131n <code><head><\/code> veya <code><body><\/code> etiketinin sonuna a\u015fa\u011f\u0131daki sat\u0131r\u0131 eklemeniz yeterlidir:<\/p>\n<pre><code class=\"language-html\"><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/compressorjs@1.2.1\/dist\/compressor.min.js\"><\/script>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kod par\u00e7as\u0131, Compressor.js'i global olarak <code>window.Compressor<\/code> nesnesi alt\u0131nda eri\u015filebilir k\u0131lar.<\/p>\n<h4>b) npm veya Yarn ile Kurulum<\/h4>\n<p>Daha b\u00fcy\u00fck ve yap\u0131land\u0131r\u0131lm\u0131\u015f projeler i\u00e7in paket y\u00f6neticisi kullanmak \u00f6nerilir:<\/p>\n<pre><code class=\"language-bash\">npm install compressorjs\n<\/pre>\n<p><\/code><\/p>\n<p>veya<\/p>\n<pre><code class=\"language-bash\">yarn add compressorjs\n<\/pre>\n<p><\/code><\/p>\n<p>Kurulum tamamland\u0131ktan sonra, JavaScript dosyan\u0131zda k\u00fct\u00fcphaneyi i\u00e7eri aktarabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">import Compressor from 'compressorjs';\n<\/pre>\n<p><\/code><\/p>\n<h3>2. Temel Kullan\u0131m Senaryosu<\/h3>\n<p>Compressor.js kullanmak i\u00e7in bir dosya giri\u015fi (input type=\"file\") ve s\u0131k\u0131\u015ft\u0131rma i\u015flemini tetikleyecek bir d\u00fc\u011fme (button) veya olay dinleyicisi gereklidir. A\u015fa\u011f\u0131da basit bir \u00f6rnek ile nas\u0131l kullanabilece\u011finizi g\u00f6sterece\u011fim.<\/p>\n<pre><code class=\"language-html\"><!DOCTYPE html>\n<html lang=\"tr\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Compressor.js Temel Kullan\u0131m<\/title>\n    <style>\n        body { font-family: Arial, sans-serif; margin: 20px; }\n        input[type=\"file\"] { margin-bottom: 10px; }\n        button { padding: 10px 15px; background-color: #007bff; color: white; border: none; cursor: pointer; }\n        button:hover { background-color: #0056b3; }\n        #output { margin-top: 20px; padding: 15px; border: 1px solid #ccc; background-color: #f9f9f9; }\n        #output img { max-width: 100%; height: auto; display: block; margin-top: 10px; }\n    <\/style>\n<\/head>\n<body>\n    <h2>Resim Y\u00fckle ve S\u0131k\u0131\u015ft\u0131r<\/h2>\n    <input type=\"file\" id=\"imageInput\" accept=\"image\/*\">\n    <button id=\"compressButton\">S\u0131k\u0131\u015ft\u0131r<\/button>\n\n    <div id=\"output\">\n        <p>Orijinal Boyut: <span id=\"originalSize\">N\/A<\/span><\/p>\n        <p>S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f Boyut: <span id=\"compressedSize\">N\/A<\/span><\/p>\n        <p>S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f Resim \u00d6nizlemesi:<\/p>\n        <img decoding=\"async\" id=\"compressedImagePreview\" src=\"\" alt=\"S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f Resim\" style=\"display: none;\">\n    <\/div>\n\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/compressorjs@1.2.1\/dist\/compressor.min.js\"><\/script>\n    <script>\n        document.getElementById('compressButton').addEventListener('click', () => {\n            const imageInput = document.getElementById('imageInput');\n            const file = imageInput.files[0];\n\n            if (!file) {\n                alert('L\u00fctfen bir resim dosyas\u0131 se\u00e7in.');\n                return;\n            }\n\n            document.getElementById('originalSize').textContent = <code>${(file.size \/ 1024).toFixed(2)} KB<\/code>;\n\n            new Compressor(file, {\n                quality: 0.6, \/\/ Ba\u015flang\u0131\u00e7 kalitesi\n                targetSize: 200 * 1024, \/\/ Hedef boyut: 200 KB\n                success(result) {\n                    \/\/ S\u0131k\u0131\u015ft\u0131rma ba\u015far\u0131l\u0131 oldu\u011funda \u00e7al\u0131\u015facak kod\n                    const compressedSizeKB = (result.size \/ 1024).toFixed(2);\n                    document.getElementById('compressedSize').textContent = <code>${compressedSizeKB} KB<\/code>;\n\n                    \/\/ S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f resmi \u00f6nizle\n                    const reader = new FileReader();\n                    reader.onload = (e) => {\n                        const imgPreview = document.getElementById('compressedImagePreview');\n                        imgPreview.src = e.target.result;\n                        imgPreview.style.display = 'block';\n                    };\n                    reader.readAsDataURL(result); \/\/ Blob'u Data URL'e d\u00f6n\u00fc\u015ft\u00fcr\n\n                    console.log('S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f dosya:', result);\n                },\n                error(err) {\n                    \/\/ S\u0131k\u0131\u015ft\u0131rma s\u0131ras\u0131nda hata olu\u015ftu\u011funda \u00e7al\u0131\u015facak kod\n                    console.error('S\u0131k\u0131\u015ft\u0131rma hatas\u0131:', err.message);\n                    alert('Resim s\u0131k\u0131\u015ft\u0131r\u0131l\u0131rken bir hata olu\u015ftu: ' + err.message);\n                },\n            });\n        });\n    <\/script>\n<\/body>\n<\/html>\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li>Bir <code>input type=\"file\"<\/code> ile kullan\u0131c\u0131n\u0131n resim se\u00e7mesi sa\u011flan\u0131r.<\/li>\n<li>Bir d\u00fc\u011fmeye t\u0131kland\u0131\u011f\u0131nda, se\u00e7ilen dosya <code>new Compressor(file, { ... })<\/code> ile i\u015flenir.<\/li>\n<li><code>quality: 0.6<\/code> ba\u015flang\u0131\u00e7 kalitesini, <code>targetSize: 200 * 1024<\/code> ise hedef dosya boyutunu (200 KB) belirtir. Compressor.js, bu hedef boyuta ula\u015fmak i\u00e7in kaliteyi otomatik olarak ayarlar.<\/li>\n<li><code>success<\/code> callback'i, s\u0131k\u0131\u015ft\u0131rma ba\u015far\u0131l\u0131 oldu\u011funda, <code>error<\/code> callback'i ise bir hata olu\u015ftu\u011funda \u00e7al\u0131\u015f\u0131r.<\/li>\n<li>S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f resim bir <code>Blob<\/code> nesnesi olarak d\u00f6nd\u00fcr\u00fcl\u00fcr ve bir <code>FileReader<\/code> kullan\u0131larak \u00f6nizleme i\u00e7in <code>Data URL<\/code>'e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/li>\n<\/ul>\n<p>Bu temel yap\u0131, web projenizde <b>resim s\u0131k\u0131\u015ft\u0131rma<\/b> i\u015flemini ba\u015flatmak i\u00e7in sa\u011flam bir zemin olu\u015fturur. Art\u0131k kullan\u0131c\u0131lar\u0131n\u0131z\u0131n y\u00fckledi\u011fi b\u00fcy\u00fck resimlerin performans\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcrmesinden endi\u015fe etmenize gerek kalmayacak.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryosu: Y\u00fckleme Performans\u0131n\u0131 Art\u0131rmak \u0130\u00e7in Dinamik Resim S\u0131k\u0131\u015ft\u0131rma<\/h2>\n<p>Web uygulamalar\u0131nda resim y\u00fckleme, kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik bir ad\u0131md\u0131r. \u00d6zellikle e-ticaret siteleri, sosyal medya platformlar\u0131 veya bloglar gibi g\u00f6rsel a\u011f\u0131rl\u0131kl\u0131 platformlarda, kullan\u0131c\u0131lar\u0131n y\u00fckledi\u011fi resimlerin h\u0131zl\u0131 ve optimize edilmi\u015f olmas\u0131 hayati \u00f6nem ta\u015f\u0131r. \u0130\u015fte Compressor.js'in <code>targetSize<\/code> \u00f6zelli\u011fiyle ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l b\u00fcy\u00fck bir fark yaratabilece\u011fine dair bir vaka analizi:<\/p>\n<h3>Vaka Analizi: E-ticaret Sitesinde \u00dcr\u00fcn Resimleri Optimizasyonu<\/h3>\n<p>Bir e-ticaret sitesi d\u00fc\u015f\u00fcn\u00fcn. Kullan\u0131c\u0131lar, satt\u0131klar\u0131 \u00fcr\u00fcnler i\u00e7in y\u00fcksek \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc foto\u011fraflar y\u00fcklemek istiyorlar. Ancak bu foto\u011fraflar, ortalama 5-10 MB boyutlar\u0131nda olabiliyor. Sunucuda bu kadar b\u00fcy\u00fck dosyalar\u0131 saklamak maliyetli oldu\u011fu gibi, bu resimlerin web sayfas\u0131nda g\u00f6sterilmesi de yava\u015f y\u00fckleme s\u00fcrelerine neden oluyor. Site y\u00f6neticileri, her bir \u00fcr\u00fcn resminin 300 KB'\u0131 ge\u00e7memesini istiyor.<\/p>\n<p><b>Sorun:<\/b><\/p>\n<ul>\n<li>B\u00fcy\u00fck boyutlu resimler nedeniyle yava\u015f sayfa y\u00fckleme h\u0131zlar\u0131.<\/li>\n<li>Y\u00fcksek sunucu depolama maliyetleri.<\/li>\n<li>K\u00f6t\u00fc mobil <b>kullan\u0131c\u0131 deneyimi<\/b> (\u00f6zellikle yava\u015f internet ba\u011flant\u0131lar\u0131nda).<\/li>\n<\/ul>\n<p><b>\u00c7\u00f6z\u00fcm: Compressor.js ile Dinamik S\u0131k\u0131\u015ft\u0131rma<\/b><br \/>\nE-ticaret sitesi, \u00fcr\u00fcn y\u00fckleme formuna Compressor.js entegre etmeye karar verir. Kullan\u0131c\u0131 bir resim se\u00e7ip \"Y\u00fckle\" d\u00fc\u011fmesine bast\u0131\u011f\u0131nda, resim sunucuya g\u00f6nderilmeden \u00f6nce istemci taraf\u0131nda s\u0131k\u0131\u015ft\u0131r\u0131l\u0131r.<\/p>\n<pre><code class=\"language-html\"><!-- HTML Kodu -->\n<div>\n    <label for=\"productImage\">\u00dcr\u00fcn Resmi Y\u00fckle (Max 300 KB):<\/label>\n    <input type=\"file\" id=\"productImage\" accept=\"image\/*\">\n    <button id=\"uploadProductImage\">Resmi Y\u00fckle<\/button>\n<\/div>\n<div id=\"uploadStatus\"><\/div>\n<img id=\"previewImage\" style=\"max-width: 200px; display: none;\">\n<\/pre>\n<p><\/code><\/p>\n<pre><code class=\"language-javascript\"><\/pre>\n<p><\/code>import Compressor from 'compressorjs'; \/\/ E\u011fer npm ile y\u00fckl\u00fcyse<br \/>\n\/\/ Veya CDN kullan\u0131yorsan\u0131z bu sat\u0131ra gerek yok, Compressor globalde tan\u0131ml\u0131<\/p>\n<p>document.getElementById('uploadProductImage').addEventListener('click', () => {<br \/>\n    const fileInput = document.getElementById('productImage');<br \/>\n    const statusDiv = document.getElementById('uploadStatus');<br \/>\n    const previewImg = document.getElementById('previewImage');<br \/>\n    const file = fileInput.files[0];<\/p>\n<p>    if (!file) {<br \/>\n        statusDiv.textContent = 'L\u00fctfen bir resim se\u00e7in.';<br \/>\n        return;<br \/>\n    }<\/p>\n<p>    statusDiv.textContent = 'Resim s\u0131k\u0131\u015ft\u0131r\u0131l\u0131yor...';<\/p>\n<p>    new Compressor(file, {<br \/>\n        quality: 0.8, \/\/ Ba\u015flang\u0131\u00e7 kalitesi, Compressor.js bunu ayarlayacak<br \/>\n        targetSize: 300 * 1024, \/\/ Hedef boyut: 300 KB<br \/>\n        maxWidth: 1200, \/\/ Maksimum geni\u015flik<br \/>\n        maxHeight: 1200, \/\/ Maksimum y\u00fckseklik<br \/>\n        mimeType: 'image\/jpeg', \/\/ JPEG olarak s\u0131k\u0131\u015ft\u0131r<br \/>\n        success(result) {<br \/>\n            \/\/ S\u0131k\u0131\u015ft\u0131rma ba\u015far\u0131l\u0131<br \/>\n            const compressedSizeKB = (result.size \/ 1024).toFixed(2);<br \/>\n            statusDiv.textContent = <code>S\u0131k\u0131\u015ft\u0131rma ba\u015far\u0131l\u0131! Yeni boyut: ${compressedSizeKB} KB<\/code>;<\/p>\n<p>            \/\/ Sunucuya g\u00f6nderme i\u015flemi burada yap\u0131l\u0131r<br \/>\n            \/\/ \u00d6rne\u011fin FormData kullanarak:<br \/>\n            const formData = new FormData();<br \/>\n            formData.append('productImage', result, file.name); \/\/ S\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f Blob'u g\u00f6nderiyoruz<\/p>\n<p>            \/\/ Fetch API ile sunucuya POST iste\u011fi<br \/>\n            \/\/ fetch('\/upload-product-image', {<br \/>\n            \/\/     method: 'POST',<br \/>\n            \/\/     body: formData,<br \/>\n            \/\/ })<br \/>\n            \/\/ .then(response => response.json())<br \/>\n            \/\/ .then(data => {<br \/>\n            \/\/     console.log('Sunucudan gelen yan\u0131t:', data);<br \/>\n            \/\/     alert('Resim ba\u015far\u0131yla y\u00fcklendi ve optimize edildi!');<br \/>\n            \/\/ })<br \/>\n            \/\/ .catch(error => {<br \/>\n            \/\/     console.error('Y\u00fckleme hatas\u0131:', error);<br \/>\n            \/\/     statusDiv.textContent = 'Y\u00fckleme s\u0131ras\u0131nda bir hata olu\u015ftu.';<br \/>\n            \/\/ });<\/p>\n<p>            \/\/ \u00d6nizleme i\u00e7in:<br \/>\n            const reader = new FileReader();<br \/>\n            reader.onload = (e) => {<br \/>\n                previewImg.src = e.target.result;<br \/>\n                previewImg.style.display = 'block';<br \/>\n            };<br \/>\n            reader.readAsDataURL(result);<br \/>\n        },<br \/>\n        error(err) {<br \/>\n            statusDiv.textContent = <code>Hata: ${err.message}<\/code>;<br \/>\n            console.error(err.message);<br \/>\n        },<br \/>\n    });<br \/>\n});<br \/>\n<\/code><\/p>\n<p>Bu senaryoda, Compressor.js'in <code>targetSize<\/code> ve <code>maxWidth<\/code>\/<code>maxHeight<\/code> \u00f6zellikleri birlikte kullan\u0131larak, resimlerin hem dosya boyutu hem de boyutlar\u0131 otomatik olarak optimize edilir. Bu, e-ticaret sitesinin <b>web performans\u0131n\u0131<\/b> ve <b>SEO<\/b> de\u011ferini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131rken, depolama maliyetlerini d\u00fc\u015f\u00fcr\u00fcr ve kullan\u0131c\u0131lara kesintisiz bir deneyim sunar. Kullan\u0131c\u0131, b\u00fcy\u00fck boyutlu bir dosya y\u00fcklese bile, s\u0131k\u0131\u015ft\u0131rma i\u015flemi taray\u0131c\u0131da ger\u00e7ekle\u015fti\u011fi i\u00e7in sunucuya \u00e7ok daha k\u00fc\u00e7\u00fck bir dosya gider, bu da <b>y\u00fckleme s\u00fcresi<\/b>ni k\u0131salt\u0131r ve sunucu kaynaklar\u0131n\u0131 korur.<\/p>\n<h2>Compressor.js'i Daha \u0130leri Seviyede Nas\u0131l Kullanabilirsiniz? Geli\u015fmi\u015f Ayarlar ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Compressor.js, sadece temel s\u0131k\u0131\u015ft\u0131rma i\u015flevselli\u011fi sunmakla kalmaz, ayn\u0131 zamanda geli\u015fmi\u015f kullan\u0131m senaryolar\u0131 i\u00e7in bir dizi \u00f6zelle\u015ftirilebilir se\u00e7enek sunar. Bu se\u00e7enekleri kullanarak, uygulaman\u0131z\u0131n gereksinimlerine g\u00f6re s\u0131k\u0131\u015ft\u0131rma s\u00fcrecini \u00e7ok daha detayl\u0131 bir \u015fekilde kontrol edebilirsiniz.<\/p>\n<h3>1. Boyutland\u0131rma ve D\u00f6n\u00fc\u015ft\u00fcrme Se\u00e7enekleri<\/h3>\n<p>Sadece dosya boyutunu de\u011fil, ayn\u0131 zamanda resmin fiziksel boyutlar\u0131n\u0131 da kontrol edebilirsiniz:<\/p>\n<ul>\n<li><code>maxWidth<\/code>, <code>maxHeight<\/code>: Resmin s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131ktan sonraki maksimum geni\u015fli\u011fini ve y\u00fcksekli\u011fini belirler. Resim bu boyutlar\u0131 a\u015farsa k\u00fc\u00e7\u00fclt\u00fcl\u00fcr.<\/li>\n<li><code>minWidth<\/code>, <code>minHeight<\/code>: Resmin s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131ktan sonraki minimum geni\u015fli\u011fini ve y\u00fcksekli\u011fini belirler. Resim bu boyutlar\u0131n alt\u0131na d\u00fc\u015ferse b\u00fcy\u00fct\u00fcl\u00fcr (genellikle \u00f6nerilmez, kalite kayb\u0131na neden olabilir).<\/li>\n<li><code>width<\/code>, <code>height<\/code>: Resmin belirli bir geni\u015fli\u011fe ve y\u00fcksekli\u011fe s\u0131k\u0131\u015ft\u0131r\u0131lmas\u0131n\u0131 sa\u011flar.<\/li>\n<li><code>resize<\/code>: Resmin nas\u0131l yeniden boyutland\u0131r\u0131laca\u011f\u0131n\u0131 kontrol eder. Olas\u0131 de\u011ferler:\n<ul>\n<li><code>'none'<\/code>: Boyutland\u0131rma yap\u0131lmaz.<\/li>\n<li><code>'contain'<\/code>: Resim, belirtilen boyutlar\u0131n i\u00e7ine s\u0131\u011facak \u015fekilde k\u00fc\u00e7\u00fclt\u00fcl\u00fcrken oran korunur. Bo\u015fluklar olabilir.<\/li>\n<li><code>'cover'<\/code>: Resim, belirtilen boyutlar\u0131 tamamen kaplayacak \u015fekilde k\u00fc\u00e7\u00fclt\u00fcl\u00fcrken oran korunur. Fazla k\u0131s\u0131mlar kesilebilir.<\/li>\n<li><code>'stretch'<\/code>: Resim, belirtilen boyutlara tam olarak uymas\u0131 i\u00e7in gerilir veya s\u0131k\u0131\u015ft\u0131r\u0131l\u0131r, oran bozulabilir.<\/li>\n<\/ul>\n<\/li>\n<li><code>mimeType<\/code>: S\u0131k\u0131\u015ft\u0131r\u0131lan resmin \u00e7\u0131kt\u0131 format\u0131n\u0131 belirler (\u00f6rne\u011fin, <code>'image\/webp'<\/code>, <code>'image\/jpeg'<\/code>, <code>'image\/png'<\/code>). Bu, taray\u0131c\u0131n\u0131n WebP deste\u011fi varsa daha modern ve verimli bir format kullanman\u0131z\u0131 sa\u011flar.<\/li>\n<li><code>convertSize<\/code>: Belirli bir <code>mimeType<\/code>'a d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcrken, dosya boyutu bu de\u011ferden k\u00fc\u00e7\u00fckse d\u00f6n\u00fc\u015ft\u00fcrme yapmaz.<\/li>\n<li><code>convertTypes<\/code>: Hangi MIME tiplerinin d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilece\u011fini belirten bir dizi (\u00f6rne\u011fin, <code>['image\/webp', 'image\/png']<\/code>).<\/li>\n<\/ul>\n<h3>2. EXIF Verilerini Koruma<\/h3>\n<p>Foto\u011fraflarda \u00e7ekildi\u011fi tarih, kamera modeli, konum bilgileri gibi EXIF (Exchangeable Image File Format) verileri bulunur. Bu veriler bazen gizlilik veya performans nedenleriyle kald\u0131r\u0131lmak istenirken, bazen de korunmas\u0131 gerekebilir (\u00f6rne\u011fin, bir foto\u011fraf galerisi uygulamas\u0131nda). <code>retainExif: true<\/code> se\u00e7ene\u011fi ile bu verileri koruyabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">new Compressor(file, {\n    quality: 0.8,\n    retainExif: true, \/\/ EXIF verilerini koru\n    success(result) {\n        \/\/ ...\n    },\n    error(err) {\n        \/\/ ...\n    },\n});\n<\/pre>\n<p><\/code><\/p>\n<h3>3. Asenkron \u0130\u015flemler ve Hata Y\u00f6netimi<\/h3>\n<p>Compressor.js, modern JavaScript uygulamalar\u0131 i\u00e7in Promise tabanl\u0131 bir API sunar, bu da <code>async\/await<\/code> ile kullan\u0131m\u0131 kolayla\u015ft\u0131r\u0131r ve hata y\u00f6netimini daha okunakl\u0131 hale getirir:<\/p>\n<pre><code class=\"language-javascript\">async function handleImageUpload(file) {\n    try {\n        const compressedFile = await new Compressor(file, {\n            quality: 0.7,\n            targetSize: 150 * 1024, \/\/ 150 KB\n            maxWidth: 800,\n            mimeType: 'image\/webp', \/\/ WebP format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\n            retainExif: false, \/\/ EXIF verilerini kald\u0131r\n        });\n        \n        console.log('Resim ba\u015far\u0131yla s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131:', compressedFile);\n        \/\/ compressedFile bir Blob nesnesidir, sunucuya g\u00f6nderebilirsiniz\n        return compressedFile;\n\n    } catch (error) {\n        console.error('Resim s\u0131k\u0131\u015ft\u0131rma hatas\u0131:', error.message);\n        throw error; \/\/ Hatay\u0131 yukar\u0131ya f\u0131rlat\n    }\n}\n\n\/\/ Kullan\u0131m \u00f6rne\u011fi\ndocument.getElementById('imageInput').addEventListener('change', async (e) => {\n    const file = e.target.files[0];\n    if (file) {\n        try {\n            const optimizedImage = await handleImageUpload(file);\n            \/\/ \u015eimdi optimizedImage'\u0131 sunucuya y\u00fckleyebilirsiniz\n            console.log('Optimize edilmi\u015f resim haz\u0131r:', optimizedImage);\n        } catch (error) {\n            alert('Resim i\u015flenirken bir sorun olu\u015ftu.');\n        }\n    }\n});\n<\/pre>\n<p><\/code><\/p>\n<div class=\"expert-tip\" style=\"background-color: #e6f7ff; border-left: 5px solid #007bff; padding: 10px; margin: 15px 0;\">\n  Uzman \u0130pucu: Promise tabanl\u0131 kullan\u0131m, birden fazla resmi art arda veya paralel olarak s\u0131k\u0131\u015ft\u0131rman\u0131z gerekti\u011finde kodunuzu daha y\u00f6netilebilir hale getirir. \u00d6rne\u011fin, <code>Promise.all()<\/code> ile birden fazla s\u0131k\u0131\u015ft\u0131rma i\u015flemini ayn\u0131 anda ba\u015flatabilirsiniz. Bu, \u00f6zellikle b\u00fcy\u00fck dosya y\u00fcklemelerini y\u00f6netirken <b>web performans\u0131<\/b>n\u0131 art\u0131rmada kritik bir rol oynar.\n<\/div>\n<h3>4. Birden Fazla Dosya \u0130\u015fleme<\/h3>\n<p>Kullan\u0131c\u0131lar\u0131n birden fazla resim se\u00e7mesine izin veriyorsan\u0131z, her bir dosyay\u0131 ayr\u0131 ayr\u0131 i\u015flemeniz gerekir:<\/p>\n<pre><code class=\"language-javascript\">document.getElementById('multipleImageInput').addEventListener('change', async (e) => {\n    const files = Array.from(e.target.files); \/\/ FileList'i diziye \u00e7evir\n    const compressedImages = [];\n\n    for (const file of files) {\n        try {\n            const compressedFile = await new Compressor(file, {\n                quality: 0.6,\n                targetSize: 100 * 1024, \/\/ Her resim 100 KB\n                maxWidth: 600,\n            });\n            compressedImages.push(compressedFile);\n            console.log(<code>${file.name} s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131.<\/code>);\n        } catch (error) {\n            console.error(<code>${file.name} s\u0131k\u0131\u015ft\u0131r\u0131l\u0131rken hata olu\u015ftu:<\/code>, error.message);\n        }\n    }\n    console.log('T\u00fcm resimler s\u0131k\u0131\u015ft\u0131r\u0131ld\u0131:', compressedImages);\n    \/\/ compressedImages dizisini sunucuya g\u00f6nderebilirsiniz\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu geli\u015fmi\u015f \u00f6zellikler ve kullan\u0131m ipu\u00e7lar\u0131, Compressor.js'i sadece basit bir resim s\u0131k\u0131\u015ft\u0131rma arac\u0131ndan \u00e7ok daha fazlas\u0131 haline getirir. Uygulaman\u0131z\u0131n <b>g\u00f6rsel optimizasyonu<\/b> stratejisini daha sofistike hale getirmenize ve <b>client-side s\u0131k\u0131\u015ft\u0131rma<\/b>n\u0131n t\u00fcm potansiyelini kullanman\u0131za olanak tan\u0131r.<\/p>\n<h2>Mobil Uyumlu G\u00f6r\u00fcnt\u00fc S\u0131k\u0131\u015ft\u0131rma: Responsive Tasar\u0131mda Compressor.js'in Rol\u00fc<\/h2>\n<p>G\u00fcn\u00fcm\u00fczde mobil cihazlardan internete eri\u015fim, masa\u00fcst\u00fc cihazlar\u0131 geride b\u0131rakm\u0131\u015f durumda. Bu nedenle, web sitelerinin ve uygulamalar\u0131n mobil uyumlu (responsive) olmas\u0131 sadece bir tercih de\u011fil, bir zorunluluktur. Responsive tasar\u0131m\u0131n temel ta\u015flar\u0131ndan biri de, farkl\u0131 ekran boyutlar\u0131na ve bant geni\u015fliklerine uygun g\u00f6rsel i\u00e7erik sunabilmektir. \u0130\u015fte Compressor.js, bu s\u00fcre\u00e7te \u00f6nemli bir rol oynar.<\/p>\n<h3>Neden Mobil i\u00e7in \u00d6zel S\u0131k\u0131\u015ft\u0131rma Gerekli?<\/h3>\n<p>Mobil cihazlar genellikle daha k\u00fc\u00e7\u00fck ekranlara sahiptir ve genellikle daha k\u0131s\u0131tl\u0131 bant geni\u015fli\u011fine sahip mobil a\u011flar \u00fczerinden internete ba\u011flan\u0131rlar. B\u00fcy\u00fck boyutlu resimler, mobil cihazlarda:<\/p>\n<ul>\n<li><b>Yava\u015f Y\u00fckleme S\u00fcreleri:<\/b> Mobil veri kullan\u0131m\u0131 k\u0131s\u0131tl\u0131 olan veya 3G\/4G gibi daha yava\u015f ba\u011flant\u0131lar\u0131 olan kullan\u0131c\u0131lar i\u00e7in b\u00fcy\u00fck resimler sayfa y\u00fcklemesini fel\u00e7 edebilir.<\/li>\n<li><b>Veri T\u00fcketimi:<\/b> Kullan\u0131c\u0131n\u0131n mobil veri kotas\u0131n\u0131 h\u0131zla t\u00fcketir, bu da k\u00f6t\u00fc bir deneyime yol a\u00e7ar.<\/li>\n<li><b>Performans Sorunlar\u0131:<\/b> Daha az g\u00fc\u00e7l\u00fc mobil i\u015flemciler, b\u00fcy\u00fck resimleri i\u015flerken veya yeniden boyutland\u0131r\u0131rken zorlanabilir, bu da cihaz\u0131n yava\u015flamas\u0131na neden olabilir.<\/li>\n<\/ul>\n<p>Bu nedenlerle, mobil kullan\u0131c\u0131lar i\u00e7in resimleri \u00f6zel olarak optimize etmek, <b>kullan\u0131c\u0131 deneyimi<\/b>ni \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir.<\/p>\n<h3>Compressor.js ile Responsive G\u00f6rseller Olu\u015fturma<\/h3>\n<p>Compressor.js, resimleri hedef boyutlar\u0131na (<code>maxWidth<\/code>, <code>maxHeight<\/code>) g\u00f6re yeniden boyutland\u0131rarak ve s\u0131k\u0131\u015ft\u0131rarak responsive g\u00f6rsel stratejilerine katk\u0131da bulunur. \u00d6rne\u011fin, bir mobil uygulama i\u00e7in y\u00fcklenen profil resimlerinin maksimum 400px geni\u015fli\u011finde ve 100KB boyutunda olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">new Compressor(file, {\n    quality: 0.7,\n    targetSize: 100 * 1024, \/\/ Mobil i\u00e7in hedef boyut: 100 KB\n    maxWidth: 400,          \/\/ Maksimum geni\u015flik 400 piksel\n    maxHeight: 400,         \/\/ Maksimum y\u00fckseklik 400 piksel\n    mimeType: 'image\/webp', \/\/ Mobil uyumluluk ve performans i\u00e7in WebP tercih edilebilir\n    success(result) {\n        console.log('Mobil i\u00e7in optimize edilmi\u015f resim:', result);\n        \/\/ Bu resmi mobil cihazlara \u00f6zel bir endpoint'e g\u00f6nderebilir veya responsive g\u00f6rseller i\u00e7in kullanabilirsiniz.\n    },\n    error(err) {\n        console.error('Mobil resim s\u0131k\u0131\u015ft\u0131rma hatas\u0131:', err.message);\n    },\n});\n<\/pre>\n<p><\/code><\/p>\n<h3><code><picture><\/code> Etiketi ve <code>srcset<\/code> ile Entegrasyon<\/h3>\n<p>Compressor.js ile farkl\u0131 boyutlarda ve formatlarda resimler olu\u015fturduktan sonra, bunlar\u0131 HTML'deki <code><picture><\/code> etiketi ve <code>srcset<\/code> \u00f6zniteli\u011fi ile entegre edebilirsiniz. Bu sayede taray\u0131c\u0131, kullan\u0131c\u0131n\u0131n cihaz\u0131na ve a\u011f ko\u015fullar\u0131na en uygun resmi otomatik olarak se\u00e7er.<\/p>\n<p>\u00d6rne\u011fin, Compressor.js ile ayn\u0131 resmin k\u00fc\u00e7\u00fck (mobil), orta (tablet) ve b\u00fcy\u00fck (masa\u00fcst\u00fc) versiyonlar\u0131n\u0131 olu\u015fturabilirsiniz:<\/p>\n<ol>\n<li>Mobil i\u00e7in: <code>maxWidth: 400, targetSize: 80 * 1024, mimeType: &#039;image\/webp&#039;<\/code> -> <code>image-mobile.webp<\/code><\/li>\n<li>Tablet i\u00e7in: <code>maxWidth: 800, targetSize: 200 * 1024, mimeType: &#039;image\/jpeg&#039;<\/code> -> <code>image-tablet.jpeg<\/code><\/li>\n<li>Masa\u00fcst\u00fc i\u00e7in: <code>maxWidth: 1200, targetSize: 400 * 1024, mimeType: &#039;image\/jpeg&#039;<\/code> -> <code>image-desktop.jpeg<\/code><\/li>\n<\/ol>\n<p>Ard\u0131ndan HTML'de:<\/p>\n<pre><code class=\"language-html\"><picture>\n  <source srcset=\"image-mobile.webp\" media=\"(max-width: 600px)\" type=\"image\/webp\">\n  <source srcset=\"image-tablet.jpeg\" media=\"(max-width: 1024px)\" type=\"image\/jpeg\">\n  <img decoding=\"async\" src=\"image-desktop.jpeg\" alt=\"Responsive G\u00f6r\u00fcnt\u00fc\">\n<\/picture>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m, modern <b>responsive g\u00f6r\u00fcnt\u00fcler<\/b> olu\u015fturman\u0131n en etkili yollar\u0131ndan biridir ve Compressor.js, farkl\u0131 <code>source<\/code> elemanlar\u0131 i\u00e7in gerekli olan optimize edilmi\u015f resim varyasyonlar\u0131n\u0131 istemci taraf\u0131nda haz\u0131rlaman\u0131za olanak tan\u0131r.<\/p>\n<h3>CSS Media Query \u00d6rnekleri (G\u00f6rsel Boyutlar\u0131 Dinamik Ayarlama)<\/h3>\n<p>Compressor.js ile \u00fcretilen farkl\u0131 boyutlardaki g\u00f6rselleri CSS media query'lerle de destekleyebilirsiniz. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlarda daha az bant geni\u015fli\u011fi harcayan daha k\u00fc\u00e7\u00fck bir arka plan resmi y\u00fcklemek isteyebilirsiniz:<\/p>\n<pre><code class=\"language-css\">\/* Masa\u00fcst\u00fc i\u00e7in b\u00fcy\u00fck arka plan resmi *\/\nbody {\n    background-image: url('image-desktop.jpeg');\n    background-size: cover;\n}\n\n\/* 768 pikselden k\u00fc\u00e7\u00fck ekranlar (tablet dikey) i\u00e7in *\/\n@media screen and (max-width: 768px) {\n    body {\n        background-image: url('image-tablet.jpeg');\n    }\n}\n\n\/* 480 pikselden k\u00fc\u00e7\u00fck ekranlar (mobil) i\u00e7in *\/\n@media screen and (max-width: 480px) {\n    body {\n        background-image: url('image-mobile.webp'); \/* Daha k\u00fc\u00e7\u00fck boyutlu ve WebP format\u0131nda *\/\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Compressor.js, responsive tasar\u0131m stratejilerinizde dinamik ve etkili bir <b>g\u00f6rsel optimizasyonu<\/b> sa\u011flamak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Kullan\u0131c\u0131lar\u0131n cihazlar\u0131ndan ba\u011f\u0131ms\u0131z olarak h\u0131zl\u0131 ve verimli bir deneyim sunman\u0131za yard\u0131mc\u0131 olur, bu da <b>SEO<\/b> ve <b>web performans\u0131<\/b> i\u00e7in kritik bir unsurdur.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. Compressor.js \u00fccretli bir k\u00fct\u00fcphane midir?<\/h3>\n<p>Hay\u0131r, Compressor.js a\u00e7\u0131k kaynakl\u0131 ve tamamen \u00fccretsiz bir JavaScript k\u00fct\u00fcphanesidir. MIT lisans\u0131 alt\u0131nda da\u011f\u0131t\u0131lmaktad\u0131r, bu da onu hem ki\u015fisel hem de ticari projelerde \u00f6zg\u00fcrce kullanabilece\u011finiz anlam\u0131na gelir.<\/p>\n<h3>2. Compressor.js t\u00fcm taray\u0131c\u0131larda \u00e7al\u0131\u015f\u0131r m\u0131?<\/h3>\n<p>Compressor.js, HTML5 Canvas API'si ve Blob API'si gibi modern web standartlar\u0131n\u0131 kullan\u0131r. Bu nedenle, \u00e7o\u011fu modern taray\u0131c\u0131da (Chrome, Firefox, Safari, Edge gibi) sorunsuz bir \u015fekilde \u00e7al\u0131\u015f\u0131r. Internet Explorer'\u0131n eski s\u00fcr\u00fcmleri gibi baz\u0131 eski taray\u0131c\u0131larda uyumluluk sorunlar\u0131 ya\u015fanabilir, ancak bu t\u00fcr taray\u0131c\u0131lar\u0131n kullan\u0131m oran\u0131 g\u00fcn\u00fcm\u00fczde olduk\u00e7a d\u00fc\u015f\u00fckt\u00fcr.<\/p>\n<h3>3. Compressor.js video s\u0131k\u0131\u015ft\u0131rma yapar m\u0131?<\/h3>\n<p>Hay\u0131r, Compressor.js sadece resim dosyalar\u0131n\u0131 s\u0131k\u0131\u015ft\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Video s\u0131k\u0131\u015ft\u0131rma i\u00e7in farkl\u0131 k\u00fct\u00fcphaneler veya sunucu tarafl\u0131 \u00e7\u00f6z\u00fcmler kullanman\u0131z gerekir. K\u00fct\u00fcphane, Blob veya File nesnesi olarak y\u00fcklenen resim verilerini i\u015fler.<\/p>\n<h3>4. S\u0131k\u0131\u015ft\u0131rma s\u0131ras\u0131nda kullan\u0131c\u0131 verileri ne kadar g\u00fcvende?<\/h3>\n<p>Compressor.js, s\u0131k\u0131\u015ft\u0131rma i\u015flemini tamamen istemci taraf\u0131nda (kullan\u0131c\u0131n\u0131n taray\u0131c\u0131s\u0131nda) ger\u00e7ekle\u015ftirir. Bu, resim verilerinin sunucuya g\u00f6nderilmeden \u00f6nce i\u015flendi\u011fi anlam\u0131na gelir. Dolay\u0131s\u0131yla, hassas verilerin sunucuya iletilmeden \u00f6nce optimize edilmesi veya filtrelenmesi a\u00e7\u0131s\u0131ndan bir g\u00fcvenlik avantaj\u0131 sa\u011flayabilir. K\u00fct\u00fcphane kendisi herhangi bir veri toplamaz veya \u00fc\u00e7\u00fcnc\u00fc taraflarla payla\u015fmaz.<\/p>\n<h3>5. S\u0131k\u0131\u015ft\u0131rma kalitesini nas\u0131l ayarlayabilirim?<\/h3>\n<p>Compressor.js'de kalite ayar\u0131n\u0131 iki ana \u015fekilde yapabilirsiniz:<\/p>\n<ul>\n<li><code>quality<\/code> parametresiyle do\u011frudan bir de\u011fer (0.1'den 1.0'a kadar) belirleyerek. \u00d6rne\u011fin, <code>quality: 0.6<\/code>.<\/li>\n<li><code>targetSize<\/code> parametresiyle bir hedef dosya boyutu (bayt cinsinden) belirterek. Bu durumda Compressor.js, hedef boyuta ula\u015fmak i\u00e7in kaliteyi otomatik olarak iteratif bir \u015fekilde ayarlar. Bu y\u00f6ntem, belirli bir dosya boyutu k\u0131s\u0131tlaman\u0131z oldu\u011funda \u00e7ok daha etkilidir ve manuel kalite ayar\u0131 yapma gereksinimini ortadan kald\u0131r\u0131r.<\/li>\n<\/ul>\n<h2>Sonu\u00e7: Web Deneyiminizi D\u00f6n\u00fc\u015ft\u00fcrmek \u0130\u00e7in Resim Optimizasyonunun G\u00fcc\u00fc<\/h2>\n<p>Dijital d\u00fcnyada h\u0131z ve performans, kullan\u0131c\u0131 memnuniyetinin ve \u00e7evrimi\u00e7i varl\u0131\u011f\u0131n\u0131z\u0131n ba\u015far\u0131s\u0131n\u0131n temelini olu\u015fturur. Bu teknik makalede ele ald\u0131\u011f\u0131m\u0131z gibi, optimize edilmemi\u015f resimler, web sitenizin veya uygulaman\u0131z\u0131n yava\u015flamas\u0131na, <b>kullan\u0131c\u0131 deneyimi<\/b>nin d\u00fc\u015fmesine ve hatta <b>SEO<\/b> s\u0131ralamalar\u0131n\u0131z\u0131n olumsuz etkilenmesine neden olabilir. Ancak, <b>Compressor.js<\/b> gibi g\u00fc\u00e7l\u00fc bir JavaScript k\u00fct\u00fcphanesi sayesinde bu sorunlar\u0131n \u00fcstesinden gelmek art\u0131k \u00e7ok daha kolay ve eri\u015filebilir.<\/p>\n<p>Compressor.js, \u00f6zellikle <code>targetSize<\/code> \u00f6zelli\u011fi ile, resimlerinizi manuel ayarlar yapmaya gerek kalmadan otomatik olarak belirli bir dosya boyutuna s\u0131k\u0131\u015ft\u0131rma yetene\u011fi sunar. Bu, geli\u015ftiricilere b\u00fcy\u00fck bir esneklik ve zaman tasarrufu sa\u011flarken, ayn\u0131 zamanda son kullan\u0131c\u0131lara daha h\u0131zl\u0131 y\u00fcklenen, daha verimli ve g\u00f6rsel olarak \u00e7ekici bir deneyim sunar. \u0130ster bir e-ticaret platformunda \u00fcr\u00fcn g\u00f6rsellerini optimize edin, ister bir sosyal medya uygulamas\u0131nda profil resimlerini y\u00f6netin, Compressor.js client-side s\u0131k\u0131\u015ft\u0131rma yetene\u011fiyle <b>web performans\u0131<\/b>n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rman\u0131za yard\u0131mc\u0131 olur. Farkl\u0131 ekran boyutlar\u0131na ve a\u011f ko\u015fullar\u0131na uyum sa\u011flayan <b>responsive g\u00f6r\u00fcnt\u00fcler<\/b> olu\u015fturma becerisi, mobil \u00f6ncelikli d\u00fcnyan\u0131n gereksinimlerini kar\u015f\u0131laman\u0131z i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline getirir.<\/p>\n<p>Sonu\u00e7 olarak, resim optimizasyonu art\u0131k sadece bir teknik detay de\u011fil, stratejik bir zorunluluktur. Compressor.js'i projelerinize entegre ederek, hem geli\u015ftirme s\u00fcre\u00e7lerinizi kolayla\u015ft\u0131racak hem de kullan\u0131c\u0131lar\u0131n\u0131za hak ettikleri h\u0131zl\u0131 ve ak\u0131c\u0131 web deneyimini sunacaks\u0131n\u0131z. Web sitenizin gelece\u011fini d\u00f6n\u00fc\u015ft\u00fcrmek ve rekabette \u00f6ne ge\u00e7mek i\u00e7in bu g\u00fc\u00e7l\u00fc k\u00fct\u00fcphanenin sundu\u011fu avantajlar\u0131 mutlaka de\u011ferlendirmelisiniz. Unutmay\u0131n, h\u0131zl\u0131 bir web sitesi sadece daha iyi bir kullan\u0131c\u0131 deneyimi sunmakla kalmaz, ayn\u0131 zamanda daha y\u00fcksek d\u00f6n\u00fc\u015f\u00fcm oranlar\u0131 ve daha g\u00fc\u00e7l\u00fc bir marka imaj\u0131 demektir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-30978","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma<\/title>\n<meta name=\"description\" content=\"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma\" \/>\n<meta property=\"og:description\" content=\"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-04T04:01:23+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma\",\"datePublished\":\"2025-10-04T04:01:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\"},\"wordCount\":4103,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\",\"name\":\"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-04T04:01:23+00:00\",\"description\":\"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma","description":"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/","og_locale":"tr_TR","og_type":"article","og_title":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma","og_description":"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.","og_url":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-04T04:01:23+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma","datePublished":"2025-10-04T04:01:23+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/"},"wordCount":4103,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/","url":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/","name":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-04T04:01:23+00:00","description":"Web sitelerinizde veya uygulamalar\u0131n\u0131zda resim boyutunu optimize etmek mi istiyorsunuz? Compressor.js ile kaliteden \u00f6d\u00fcn vermeden otomatik boyut ayarlayarak resimlerinizi kolayca s\u0131k\u0131\u015ft\u0131r\u0131n ve performans\u0131n\u0131z\u0131 art\u0131r\u0131n. Bu sayede hem kullan\u0131c\u0131 deneyimini iyile\u015ftirir hem de SEO puan\u0131n\u0131z\u0131 y\u00fckseltirsiniz.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/resim-sikistirma-compressor-js-ile-kaliteyi-otomatik-ayarlayarak-hedef-boyuta-ulasma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Resim S\u0131k\u0131\u015ft\u0131rma: Compressor.js ile Kaliteyi Otomatik Ayarlayarak Hedef Boyuta Ula\u015fma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30978","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=30978"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30978\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30978"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30978"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30978"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}