最近要把项目中的图片全部生成webp格式, 过程整理一下, (直接存在本地,或者图片链接存在数据库都可以看看)
首先,肯定是批量处理, 一个php处理不了这么多, 会爆内存的, 个人建议用ajax循环调用php文件
下面贴ajax代码, 小白和我看看就行, 老人跳过
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>更换图片</title> <script type="text/javascript" src="./jquery-1.8.3.min.js"></script> </head> <body> <button id="but01">点我就帮你转图片</button> </body> <script type="text/javascript"> var limit = 50; //每次50条 var offset = 0; //偏移量,每次自增50 function toPhp(){ $.ajax({ url: "./sqlsrc.php", //后台处理程序 type: 'POST', data: {limit: limit, offset: offset}, success:function(data) { if(data) { offset = offset + 50; toPhp(); //根据后台返回的内容,继续调用自己 }else { alert('这里是limit---' + limit); alert('这里是data---' + data); alert('完成'); } }, error:function() { alert('失败'); }, dataType:'text' }); } $("#but01").click(toPhp); // 点击按钮执行程序</script> </html>
下面是php处理文件, sqlsrc.php主要是处理那种图片路径存在数据库里的,
以下本人是把数据库的图片拉到本地同时生成webp格式/
你可以直接在项目所在的目录运行此脚本,
注意 sqlsrc.php中的地址要自己拼~
sqlsrc.php文件如下
<?php ini_set ('gd.jpeg_ignore_warning', 1); //忽略 set_time_limit(0);//0表示不限时 $dsn='mysql:host=192.168.1.1;dbname=yourdbname'; $user='root'; $password=''; $status=1; //看个人需要了,这个参数 $data = $_POST; try { $sql='select thumbnail_pic,small_pic,big_pic from sdb_goods'; $sql .= " limit {$data['limit']} offset {$data['offset']}"; // 偏移分页查询/ $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $stmt=$dbh->prepare($sql); $stmt->bindParam(':status',$status); //绑定参数的样例, 喜欢参数绑定的看这里,其他人无视这行 $stmt->execute(); $flag = false; //这里设置一个标识,如果没走while函数, 那么flag依然为false while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) { $flag = true; //只要有查询到的内容, flag就会true $count = $data['count']; $ptn = "/http.*?fs_storage/"; foreach ($row as $k=>$v){ preg_match_all($ptn,$v,$res); if(empty($res[0])) { continue; } foreach ($res as $kk=>&$vv) //这层遍历不需要, 谁可以优化下贴上来. { $vv[0] = rtrim($vv[0],'fs_storage');//图片远程路径 $vv[0] = rtrim($vv[0],'|');//图片远程路径 $ptn01 = "/http.*?\|/"; $src = preg_replace($ptn01,'',$vv[0]); //远程路径标准版 if(empty($src)) { continue; } //这里获取到表中图片的地址, 整理成本地的地址 $ptn02 = "/.*com/"; $local = preg_replace($ptn02,'.',$src); //本地路径 $ptn03 = "/:88/"; $local = preg_replace($ptn03,'',$local); //本地路径+文件名 $path = pathinfo($local,PATHINFO_DIRNAME); if(empty($path)) { continue; } if(!is_dir($path)) { mkdir($path,777,true); // } //下面这行会报个warning, 忘了是啥, 直接抑制掉了 @$img = file_get_contents($src); if (!$img) { continue; } file_put_contents($local,$img); //根据数据库的地址下载图片到本地// turnType($local); //此行代码调用函数, 在文件夹中生成一个同名的webp图片; //接着应该把地址存到数据库中 //拼接成你线上的url图片地址,然后存到数据库就行了 //但是没必要,名字都是一样的,只是后缀不一样 } } } echo $flag; $flag = false; //这行也是不需要的, 但是为了祭奠我的老师, 容许我放在这里占个位/ } catch (PDOException $e) { echo 'SQL Query:'.$sql.'</br>'; echo 'Connection failed:'.$e->getMessage(); } ?> sqlsrc
关于上面这个文件,while中的代码, 主要是正则 拼接地址,这部分可以不看, 每个人的业务都不一样, 所以看了也白看, 直接看其他部分(gd库函数和最后的调用函数)
我这里是1次查50张图片, 然后遍历, 一张图片一张图片生成webp,效率非常不高///////////
pictest.php文件如下,(上个文件中有调用, )
单个图片生成webp
<?php /* ** webp格式转换函数, ** 参数为具体的图片路径加上文件名, ** 例:D:\workspaces\upload\images\2017\demo.jpeg */ function turnType($file) { if(is_file($file)) { //获取文件后缀名 $ext = pathinfo($file,PATHINFO_EXTENSION);; //根据后缀名把jpg或者png转成webp if($ext == 'jpeg' || $ext == 'jpg' || $ext == 'png') { //生成新的文件名 $newpic = rtrim($file,$ext).'webp'; if($ext == 'jpg' ) { $ext = 'jpeg'; } $funName = 'imagecreatefrom'.$ext; //拼接函数名imagecreatefromjpeg 还是 imagecreatefrompng $hImg = $funName($file); //打开这个图片资源, imagewebp($hImg,$newpic); //用这个图片资源创建一个webp图片, 存在路径$tdir imagedestroy($hImg); //销毁画布资源 } } } ?> 单个文件生成webp
单个文件生成webp
以上三个代码放在一个文件夹中/ 主要改第二个文件sqlsrc.php中拼接地址的部分(或者删除) ,图片直接在本地的...可以参考下面的代码,
怎么限制每次查询的数量没考虑, 谁有建议可以贴上来/
这里还有直接遍历整个目录, 然后批量生成webp格式的代码. 数据量小的可以参考下/;
<?php $dir = '../images'; //这里设置目录, 会遍历整个目录,然后生成一个webp格式的图片/ 数量太大会超内存,有需要的可以参考imgtype($dir);//这里调用函数 //格式转换函数function jpgturn ($sdir,$tdir,$ext) { if($ext == 'jpeg' || $ext == 'jpg') { $hImg = imagecreatefromjpeg($sdir); } if($ext == 'png' || $ext == 'PNG') { $hImg = imagecreatefrompng($sdir); } imagewebp($hImg,$tdir); imagedestroy($hImg); }// 自定义函数---获取后缀名;function get_extension($file) { return pathinfo($file,PATHINFO_EXTENSION); }// 遍历目录, 递归调用, 拼接新文件名, 然后调用格式转换函数function imgtype ($dir) { $dir = rtrim($dir,'/').'/'; $hd = opendir($dir); // while($hf=readdir($hd)) // { if($hf=='.'||$hf=='..') { continue; } if(is_file($dir.$hf)) { //获取文件后缀名的自定义函数 $ext = get_extension($dir.$hf); //根据后缀名把jpg转成webp if($ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'PNG') { //生成新的文件名 $new = rtrim($dir.$hf,$ext); $new .= 'webp'; jpgturn($dir.$hf,$new,$ext); } }if(is_dir($dir.$hf))//递归调用 { imgtype($dir.$hf); } } }?>
위 내용은 PHP 배치 이미지 형식 변환 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

PHP는 현대화 프로세스에서 많은 웹 사이트 및 응용 프로그램을 지원하고 프레임 워크를 통해 개발 요구에 적응하기 때문에 여전히 중요합니다. 1.PHP7은 성능을 향상시키고 새로운 기능을 소개합니다. 2. Laravel, Symfony 및 Codeigniter와 같은 현대 프레임 워크는 개발을 단순화하고 코드 품질을 향상시킵니다. 3. 성능 최적화 및 모범 사례는 응용 프로그램 효율성을 더욱 향상시킵니다.

phphassignificallyimpactedwebdevelopmentandextendsbeyondit

PHP 유형은 코드 품질과 가독성을 향상시키기위한 프롬프트입니다. 1) 스칼라 유형 팁 : PHP7.0이므로 int, float 등과 같은 기능 매개 변수에 기본 데이터 유형을 지정할 수 있습니다. 2) 반환 유형 프롬프트 : 기능 반환 값 유형의 일관성을 확인하십시오. 3) Union 유형 프롬프트 : PHP8.0이므로 기능 매개 변수 또는 반환 값에 여러 유형을 지정할 수 있습니다. 4) Nullable 유형 프롬프트 : NULL 값을 포함하고 널 값을 반환 할 수있는 기능을 포함 할 수 있습니다.

PHP에서는 클론 키워드를 사용하여 객체 사본을 만들고 \ _ \ _ Clone Magic 메소드를 통해 클로닝 동작을 사용자 정의하십시오. 1. 복제 키워드를 사용하여 얕은 사본을 만들어 객체의 속성을 복제하지만 객체의 속성은 아닙니다. 2. \ _ \ _ 클론 방법은 얕은 복사 문제를 피하기 위해 중첩 된 물체를 깊이 복사 할 수 있습니다. 3. 복제의 순환 참조 및 성능 문제를 피하고 클로닝 작업을 최적화하여 효율성을 향상시키기 위해주의를 기울이십시오.

PHP는 웹 개발 및 컨텐츠 관리 시스템에 적합하며 Python은 데이터 과학, 기계 학습 및 자동화 스크립트에 적합합니다. 1.PHP는 빠르고 확장 가능한 웹 사이트 및 응용 프로그램을 구축하는 데 잘 작동하며 WordPress와 같은 CMS에서 일반적으로 사용됩니다. 2. Python은 Numpy 및 Tensorflow와 같은 풍부한 라이브러리를 통해 데이터 과학 및 기계 학습 분야에서 뛰어난 공연을했습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
