整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          電商圖片處理方法

          電商圖片處理方法

          著互聯網與科技的發展,電商也在快速地發展。產品精修在電商設計中占有至關重要的位置,影響消費者購買欲望的除了產品本身的質量外,更重要的是產品給人第一印象的美觀。就像你去看美女選秀時,如果模特是歪瓜裂棗,你肯定不會有看下去的欲望。產品也是如此,首先吸引你的是好看的外觀,你才有了解下去的欲望。而體現產品美觀度最簡單粗暴的方法就是修圖,也就是產品精修。個人認為產品精修主要修的是產品的結構(主要體現在其光影關系)和其自身材質,就像人的骨骼和皮膚。


          沒有光影關系對比的產品再美也是花瓶,它會顯得很假、很單薄,沒有立體感。產品修圖就像畫素描一樣,首先刻畫它的三大面五大明暗調子,刻畫它的質感。我們在ps修圖時著重加強的是它的亮面、暗面和高光來體現。

          三大面五大明暗調子圖示

          第一步:去除瑕疵

          去除瑕疵

          第二步:刻畫暗面與亮面的對比與過渡和高光的處理

          根據我自己的工作經驗,我認為產品的光影關系在ps中刻畫主要分為兩大部分:暗面與亮面的對比與過渡和高光的處理。對光影關系的把握和拿捏是要靠大量的練習才能掌握的。暗面與亮面的對比,我個人的做法是把亮面拼命提亮到合適值和拼命壓暗暗面(不能過曝和過黑,過曝就是一片白色,過暗就是一片黑色,沒有細節。如果掌握不了,請參考上面的三大面五大明暗調子圖示)。執行這兩個面的對比,主要用到是ps中的亮度與對比度工具、曲線工具、色階工具、陰影與高光工具和camera raw濾鏡。我個人喜歡用曲線工具和camera raw濾鏡來調整。



          下面跟大家分享曲色階與曲線運用小技巧:當亮面與暗面對比不強烈時,整個畫面就會灰蒙蒙一片時,就可以運用下面的小技巧來調整。(操作步驟如下圖)

          曲色階與曲線運用小技巧


          當亮面與暗面對比不強烈時,整個畫面就會灰蒙蒙一片時,就可以運用camera raw濾鏡來調整,下圖紅框部分就是調整選項,各選項數值根據畫面來調整(不能過曝,也不能過黑)。

          camera raw濾鏡


          如果上面的步驟沒有效果,那么就要分別摳出高光和暗面來調整它的光影關系了。高光部分刻畫主要用到羽化和曲線工具。首先復制原圖一層,再摳出高光區域并建立選區(高光選區快捷鍵“Ctrl+Alt+2”,擇暗部快捷鍵是“ctrl+alt+shift+2”。),然后羽化選區,數值自定,羽化后按快捷鍵是ctrl+m調出曲線工具,曲線數值按圖片實際效果來調。

          第三步:亮面與暗面的過渡方法,即灰面的刻畫(非必須,暗亮面過渡和諧時可不執行這壹步驟)。

          當亮面和暗面對比過渡不和諧時可以用修補工具選中明暗交界線附近的區域并把選區移動到亮面,直到過渡和諧為止。

          灰面的刻畫

          第四步:添加材質

          “氣質”好,穿什么“衣服”都好看。產品的材質是產品氣質的一種體現方式,也是產品情感的一種表達方式。比如說鋼鐵材質傳達的氣質是剛硬、鋒利。金銀材質傳達的氣質是高貴、貴重........。

          我們在調整好產品光影關系之后,往往會削弱產品材質的體現。這時就需要我們在光影調整好的基礎上疊加一層材質上去(在網上找或者自己制作都行)。


          下面給大家分享一些常見的材質的制作方法,制作材質經常用到的是濾鏡和圖層樣式、漸變工具等等。下面推薦一些教程網站供大家學習,我就不詳細講了。

          運用處理產品圖片案例:http://www.ps-xxw.cn/shiyongjiqiao/8654.html

          更多材質效果教程網站:思緣論壇、ps聯盟、ps學習網、ps家園、飛特網

          下面再分享一些修圖小技巧

          分享一組我修過的圖

          Java實現根據svg模版動態生成圖片

          使用場景

          需要Java語言動態生成圖片

          用流程圖簡單說明下我這邊工作中使用的場景

          僅供參考

          所以這里就需要生成證書了

          我先給大家看下最終實現的圖片效果

          這里要先說明一下

          • 圖片上的文字都是動態變化的即不同的訂單對應的圖片內容都不一樣
          • 圖片上還可以嵌入圖片哦 比如上圖的logo圖片

          下面說下我是如何解決的

          通過PhantomJS來實現

          這種方式是不能實現這個需求的

          這個的原理就是對網頁截圖 但只能對于靜態頁面截圖 不能根據不同的參數值動態生成圖片

          所以不提倡使用這種方式

          但也介紹下這種使用方式 朋友們根據自己的實際需求情況有選擇的使用

          通過html代碼實現圖片的效果 放入web容器(比如nginx)中部署

          這是h5代碼

          test文件夾下面的內容

          安裝一個docker nginx 將test文件夾加載到nginx容器的/usr/share/nginx/html目錄下面

          docker run --name nginx80  -p 8000:80  -v /tmp/test:/usr/share/nginx/html -d docker.io/nginx
          

          訪問的頁面效果

          訪問該頁面進行截圖

          這張圖片是截圖生成的圖片 但url中的id值并沒有傳給頁面

          在h5代碼中請求后端接口獲取數據動態顯示出來也是不可以的

          所以這種方式使用局限性很窄

          簡單介紹下代碼原理

          大致原理是 通過http請求該url獲取該url的文件流然后解析h5代碼生成圖片

          通過SVG模版動態生成

          先寫svg模版(其實也是h5代碼)

          讀取svg模版 動態傳入參數生成圖片

          其實現原理大致為 讀取svg document h5代碼 將動態參數map解析到h5代碼中 轉換成字節數組 生成圖片格式

          Linux環境圖片中文亂碼

          我本地是mac系統沒有這個問題 在發布到測試環境linux系統出現了這個問題

          先看下問題的現象

          看到了沒 生成的圖片中文全是亂碼

          原因是因為linux系統沒有中文字體

          既然linux系統沒有中文字體 那么就安裝它嘛 let's 盤它!!!

          先看下mac環境的字體情況

          • 安裝字體管理工具
          brew install fontconfig
          
          • 查看支持中文
          fc-list :lang=zh    (注意‘:’前的空格)
          

          mac環境默認會安裝很多中文字體

          再看下linux環境

          • 安裝字體管理工具
          yum -y install fontconfig
          
          • 查看支持中文
          fc-list :lang=zh
          

          果然沒有中文字體

          開始安裝中文字體

          將mac環境的宋體上傳到linux環境

          a 先在mac系統中找到字體安裝目錄

          /System/Library/Fonts
          

          b 找到宋體對應的文件

          c 將該文件上傳到linux指定的目錄下

          /usr/share/fonts/chinese
          

          d 賦予文件夾操作權限

          chmod -R 755 /usr/share/fonts/chinese
          

          e 安裝ttmkfdir來搜索目錄中所有的字體信息,并匯總生成fonts.scale文件

          yum -y install ttmkfdir
          
          ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
          
          

          修改字體配置文件

          vi /etc/fonts/fonts.conf
          添加
          <dir>/usr/share/fonts/chinese</dir>
          

          刷新內存中的字體緩存

          fc-cache
          

          確認是否安裝成功

          在jdk中安裝該宋體

          a 找到jdk所在的安裝目錄

          echo $JAVA_HOME 
          

          b 將宋體文件復制過來

          cp /usr/share/fonts/chinese/STHeiti\ Light.ttc /usr/local/software/jdk1.8.0_141/jre/lib/fonts/fallback
          
          fallback代表存放后備語言的文件夾
          

          重啟java服務即可

          DEMO代碼

          https://gitee.com/pingfanrenbiji/resource/tree/master/image
          

          注意: 引入的依賴問題

            <!--phantomjs -->
            <dependency>
             <groupId>org.seleniumhq.selenium</groupId>
             <artifactId>selenium-java</artifactId>
             <version>2.53.1</version>
            </dependency>
            <dependency>
             <groupId>com.github.detro</groupId>
             <artifactId>ghostdriver</artifactId>
             <version>2.1.0</version>
            </dependency>
          
            <!--svg-->
            <dependency>
             <groupId>com.github.hui.media</groupId>
             <artifactId>svg-core</artifactId>
             <version>2.5</version>
            </dependency>
          
          

          這些依賴jar包我是上傳到了公司的私服上了

          若是朋友們下拉不下來

          我提供給大家這些底層jar包的實現源碼

          https://gitee.com/pingfanrenbiji/quick-media
          

          自行上傳到自己的私服即可

          JavaScript中,您可以使用HTML5的<input type="file">元素來實現圖片上傳功能。

          以下是一個簡單的示例代碼,演示如何在JavaScript中上傳圖片:

          HTML部分:

          <input type="file" id="uploadInput">
          <button onclick="uploadImage()">上傳圖片</button>
          

          JavaScript部分:

          function uploadImage() {
            var fileInput=document.getElementById('uploadInput');
            var file=fileInput.files[0];
          
            if (file) {
              var formData=new FormData();
              formData.append('image', file);
          
              // 發送圖片數據到服務器
              // 這里可以使用XMLHttpRequest或fetch等方法發送請求
              // 請根據您的需求選擇適當的方法
              // 示例中使用XMLHttpRequest發送POST請求
              var xhr=new XMLHttpRequest();
              xhr.open('POST', '/upload', true);
              xhr.onload=function() {
                if (xhr.status===200) {
                  // 上傳成功
                  console.log('圖片上傳成功');
                } else {
                  // 上傳失敗
                  console.log('圖片上傳失敗');
                }
              };
              xhr.send(formData);
            }
          }
          

          API部分:

          [HttpPost]
          [RequestSizeLimit(5242880)]
           public async Task<APIResult> upload(IFormCollection collection)
           {
          
                      APIResult rtn=new APIResult();
          
                      if (collection==null)
                      {
                          rtn.code=-100;
                          rtn.msg="圖片列表為空";
                          return rtn;
                      }
                      else
                      {
                          try
                          {
                              string file_path="";
                              // 預處理 用戶參數:用戶指定子路徑                   
                              string userPath=DateTime.Now.ToString("yyyy-MM-dd");
                              if (collection.ContainsKey("path"))
                              {
                                  collection.TryGetValue("path", out Microsoft.Extensions.Primitives.StringValues val);
                                  if (!val.Equals("undefined"))
                                  {
                                      userPath=val.ToString();
                                  }
                              }
          
                              // 預處理 文件路徑
                              // 注意:這里可能會根據不同的環境來 修改 路徑前面是否需要添加 /
                              // 當發現上傳不成功,目錄無法創建時,可以嘗試修改這里
                              file_path=$"upload/imgs/{userPath}/";
                              var uploadPath=Path.Combine(_webHostEnvironment.WebRootPath, file_path);
                              if (!Directory.Exists(uploadPath))
                              {
                                  Directory.CreateDirectory(uploadPath);
                              }
          
                              // 處理文件
                              FormFileCollection filelist=(FormFileCollection)collection.Files;
                              foreach (IFormFile file in filelist)
                              {
                                  // 保存文件到磁盤
                                  string name=file.FileName;
                                  string FilePath=Path.Combine(uploadPath, name);
                                  string type=Path.GetExtension(name);
                                  using (var stream=System.IO.File.Create(FilePath))
                                  {
                                      await file.CopyToAsync(stream);
                                  };
          
                                  // 保存文件信息到表
                                  Sys_File f=new Sys_File();
                                  f.code="image";
                                  f.name=name;
                                  f.file_type=type.Trim('.');
                                  f.file_group=userPath;
                                  f.file_path=$"/{file_path}{name}";
                                  f.is_active=true;
                                  f.memo="";
                                  f.createTime=DateTime.Now;
                                  using (var dbctx=DBHelper.db)
                                  {
                                      await dbctx.AddAsync(f);
                                      await dbctx.SaveChangesAsync();
                                  };
                                  // 返回消息,包含文件路徑
                                  rtn.datas=$"/{file_path}{name}";
                                  rtn.code=100;
                                  rtn.msg="文件已保存!";
                              }
                          }
                          catch (Exception ex)
                          {
                              rtn.code=-200;
                              rtn.msg="圖片保存失敗!";
                              Log4NetUnit.Instance.Log.Error("圖片保存失敗:" + ex.Message);
                          }
                          return rtn;
                      }
                  }


          在這個示例中,我們首先在HTML中創建了一個<input type="file">元素,用于選擇要上傳的圖片。

          然后,我們在JavaScript中編寫了一個uploadImage函數,該函數在點擊"上傳圖片"按鈕時觸發。

          uploadImage函數中,我們首先獲取到<input>元素,并從中獲取到用戶選擇的圖片文件。

          然后,我們創建一個FormData對象,并將圖片文件添加到其中。

          接下來,我們可以使用XMLHttpRequest或fetch等方法將圖片數據發送到服務器。

          在示例中,我們使用XMLHttpRequest發送了一個POST請求,將圖片數據作為FormData發送到/upload端點。

          您需要根據您的實際情況修改URL和請求方法。

          當請求完成時,我們可以根據響應的狀態碼來判斷上傳是否成功。

          在示例中,如果狀態碼為200,則表示上傳成功,否則表示上傳失敗。

          請注意,由于安全性限制,JavaScript無法直接訪問用戶的文件系統。

          因此,用戶必須手動選擇要上傳的文件。


          主站蜘蛛池模板: 中文字幕不卡一区| 精品国产亚洲一区二区三区| 国产福利一区二区三区| 亚洲乱码一区二区三区在线观看 | 亚洲熟妇无码一区二区三区| 无码国产精品一区二区免费虚拟VR | 亚洲乱码一区av春药高潮 | 日韩视频在线一区| 成人无号精品一区二区三区| 久久无码人妻一区二区三区 | 久久无码精品一区二区三区| 久久久一区二区三区| 中文无码一区二区不卡αv| 无码人妻久久一区二区三区蜜桃 | 亚洲性色精品一区二区在线| 国产精品免费一区二区三区| 国产一区二区三区免费看| 日韩视频免费一区二区三区| 日韩精品一区二区亚洲AV观看| 日本香蕉一区二区三区| 无码国产精品一区二区高潮| 少妇一晚三次一区二区三区| 四虎成人精品一区二区免费网站| 人妻无码第一区二区三区| 日本欧洲视频一区| 精品免费久久久久国产一区| 精品天海翼一区二区| 天美传媒一区二区三区| 久久精品一区二区三区AV| 中文字幕无线码一区| 色精品一区二区三区| 亚洲午夜一区二区三区| 亚洲AV成人一区二区三区AV| 无码毛片一区二区三区视频免费播放| 亚欧免费视频一区二区三区| 2021国产精品视频一区| 日韩一区二区三区在线| 一区二区三区免费在线视频| 国产高清一区二区三区视频| 亚洲一区二区三区乱码A| 日韩欧美一区二区三区免费观看|