Hôm nay mình chia sẻ với mọi người. Một cách tìm kiếm hình ảnh và lấy kích thước hình ảnh đó. Để mà tính toán điều kiện để add một tên class đến image đó
Vì sao ta phải làm điều đó, bởi vì, trong ứng dụng ta có rất nhiều trường hợp như:
+ Nội dung bài viết có rất nhiều hình ảnh có kích thước size khác nhau, ta muốn chỉnh sửa một số hình ảnh có size ta quy định, nếu ta dùng CSS để chỉnh thì nó sẽ ảnh hưởng hàng loạt thì không hiệu quả lắm
+ Hay ta thường gắn watermark cho những tấm hình có size lớn, mà trong bài viết có rất nhiều hình, lẽ hình nào ta cũng gắn thì không chính xác, nên ta phải tìm hình có size mà ta gắn cho chính xác
Chính vì một số vấn đề trên, ta sẽ cần add một class đến thẻ img để ta có thể dùng jquery trỏ tới class hình ảnh đó và thao tác các điều kiện mà ta cần, có nhiều cách khác nửa, nhưng nay mình dùng php, bạn nào khác dùng jquery cũng được nhé
Okay, sơ qua các vấn đề trên mình sẽ viết một đoạn code bằng PHP để tìm lấy tất cả hình ảnh trong nội dung bài viết, sao đó, tìm (witdth,height) của từng tấm hình, đúng size thì đưa link hình đó vào một mảng(array), sau đó lấy cái mảng(array) đó dò tìm lại nội dung và thêm "class" tại vị trí tấm hình nếu nó tìm thấy
* kết nối cơ sở dữ liệu và lấy tạm một dữ liệu mẫu trong database test thôi kaka
$conn = mysqli_connect('localhost', 'root', '', 'hoanguyenit'); if (!$conn) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } echo 'Success... ' . mysqli_get_host_info($conn) . "\n"; $sql = "select * from `posts` where id in(167,166)"; $result = mysqli_query($conn,$sql); $array = array(); while($rows = mysqli_fetch_array($result)){ // echo "<br />"; $content = $rows['content']; // echo $content; if (preg_match_all('/<img[^>]*src="([^"]+)"/i', $content, $matches)) { foreach ($matches[1] as $key => $value) { echo '<pre>'; array_push($array,$value); echo '</pre>'; } } }
Trong đoạn code trên mình while để lặp dữ liệu ra và sử dụng preg_match_all để tìm kiếm lấy tất cả link hình ảnh lưu vào một mảng
* Lấy kích thước từng tấm hình có trong mảng trên
$array_link_img = array(); if(count($array)>0){ for($i=0;$i<count($array);$i++){ list($width, $height) = getimagesize($array[$i]); if($width>400 && $height>200){ array_push($array_link_img,$array[$i]); } // echo "width:".$width."/height:".$height; // echo "<br/>"; } }
- $array_link_img = array(); dùng lưu hình ảnh đúng size ta yêu cầu
- list($width, $height) = getimagesize($array[$i]); tìm lấy size tấm hình tại mảng tại potision
- array_push($array_link_img,$array[$i]); nếu hình ảnh có (width>400 vs height>200) ta thêm vào mảng
* Add class đền từng <img src="link" class="abc" /> trong nội dung
if(count($array_link_img)>0){ $data_replace = array(); for($k=0;$k<count($array_link_img);$k++){ $bien =$array_link_img[$k].'" class="acb"'; array_push($data_replace,$bien); } // print_r($data_replace); $result = mysqli_query($conn,$sql); while($rows = mysqli_fetch_array($result)){ $rows['content'] = str_replace($array_link_img,$data_replace,$rows['content']); echo $rows['content']; // echo "bac"; } }
Trong đoạn code trên ta cần for từng link trong mảng và chỉnh sửa giá trị trong mảng thêm biến class="acb" vào
$data_replace = array(); for($k=0;$k<count($array_link_img);$k++){ $bien =$array_link_img[$k].'" class="acb"'; array_push($data_replace,$bien); }
Tiếp theo ta dùng str_replace để replace lại giá trị của từng link hình tại thẻ <img />
$result = mysqli_query($conn,$sql); while($rows = mysqli_fetch_array($result)){ $rows['content'] = str_replace($array_link_img,$data_replace,$rows['content']); echo $rows['content']; }
Vậy là xong, giờ bạn có thể viết jquery trỏ tới class tuy ý, không đụng chạm tới các tấm hình khác
FullCode
<?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $conn = mysqli_connect('localhost', 'root', '', 'hoanguyenit'); if (!$conn) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } echo 'Success... ' . mysqli_get_host_info($conn) . "\n"; $sql = "select * from `posts` where id in(167,166)"; $result = mysqli_query($conn,$sql); $array = array(); while($rows = mysqli_fetch_array($result)){ // echo "<br />"; $content = $rows['content']; // echo $content; if (preg_match_all('/<img[^>]*src="([^"]+)"/i', $content, $matches)) { foreach ($matches[1] as $key => $value) { echo '<pre>'; array_push($array,$value); echo '</pre>'; } } } /** get size img*/ $array_link_img = array(); if(count($array)>0){ for($i=0;$i<count($array);$i++){ list($width, $height) = getimagesize($array[$i]); if($width>400 && $height>200){ array_push($array_link_img,$array[$i]); } // echo "width:".$width."/height:".$height; // echo "<br/>"; } } if(count($array_link_img)>0){ $data_replace = array(); for($k=0;$k<count($array_link_img);$k++){ $bien =$array_link_img[$k].'" class="acb"'; array_push($data_replace,$bien); } // print_r($data_replace); $result = mysqli_query($conn,$sql); while($rows = mysqli_fetch_array($result)){ $rows['content'] = str_replace($array_link_img,$data_replace,$rows['content']); echo $rows['content']; // echo "bac"; } } // print_r($data_replace); // mysqli_close($conn);; ?>
Trên là một mẹo để các bạn tùy biến hình ảnh, tùy biến chỉnh sửa những hình ảnh,....