Mình cần resize khá nhiều file ảnh trên server nên chọn imagemagick. Khi mình chạy trên console resize 1 file thì ok. Tạo bash script resize vài file cũng OK nhưng khi resize vài chục file thì nó vẫn tạo ra file ảnh resize như bình thường nhưng file mới tạo ra không thể download về được. Khi download báo lỗi: The filename, directory name, or volume label syntax is incorrected. Lệnh chạy trên console hay bash script đều giống nhau, như sau: convert path-to-file1 -resize random-number -quanlity 80 path-to-resize-file1 Con số random-number ở trên là 1 số cụ thể mình sinh ra, trong khoảng 300-400, ngẫu nhiên cho từng file. Anh em nào có kinh nghiệm vụ này chỉ giúp với. Cám ơn anh em.
Anh đọc bài này xem https://guides.wp-bullet.com/batch-resize-images-using-linux-command-line-and-imagemagick/ Em phỏng đoán nó lỗi do cái phần random-number mà anh đặt, có thể do kích thước ảnh cần convert nhỏ hơn. Hoặc anh thử tăng gấp đôi các dấu ngoặc kép xung quanh mã điều kiện.
Random number thì chắc chắn nhỏ hơn kích thước gốc em ạ. Gấp đôi dấu ngoặc kép là sao em? Bash script của anh chỉ là N line, mỗi line là 1 lệnh convert chứ ko có điều kiện nào.
Vậy anh convert thủ công ah. path-to-file1 và path-to-resize-file1 là anh tự nhập vào hả. ví dụ: Code: for i in/home/projs/proj1/img/*.png;do convert "$i"-resize 130X130"/home/projs/proj1/imgResized/${i##*/}" done
Anh viết code C# sinh ra bash script. Vì ko biết cách sinh random number cho từng line nên ko dùng loop trong bash script. Còn nếu viết như em thi nó cố định size luôn rồi, ko đúng yêu cầu.
Anh viết bằng C trước thì chỗ cần random chỉ cần phép toán đơn giản như nối chuỗi kèm chỗ random là được mà.Kiểu convert "$i"-resize "+random.Next(width)+"X"+random.Next(height)+"/home/projs/proj1/imgResized/${i##*/}" Hay random của anh có gì đặc biệt? Lỗi anh nói thì không chỉ do khoảng trắng có thể do lỗi ngôn ngữ nữa. https://thuthuat.taimienphi.vn/loi-...r-volume-label-syntax-is-incorrect-4299n.aspx Để chắc chắn nó là lỗi ngôn ngữ thì anh gõ lệnh linux đổi tên nó thành tên đơn giản thôi abc.định dạng file mv tên_file_ảnh_lỗi abc.jpg Thành công thì đúng anh lỗi tên rồi
Cái anh tạo ra là 1 số cụ thể, như 350, 315 ... Câu lệnh (mà anh sinh ra trong bash) anh chạy bằng tay trên terminal được. Copy nhiều lệnh chạy cũng ok. Chỉ bị lỗi khi chạy bash script với vài chục lệnh (nếu bash cỡ chục lệnh thì ok). Và đây là vấn đề mà anh ko hiểu sao nó lại như vậy? Anh ko có dấu nháy vì path to file không có khoảng trắng.
Anh muốn random theo danh sách cụ thể thì câu lệnh như dưới đây. Code: private int[] allowedValues = new int[] { x, x , x , 350 , 315 }; private int GetRandomNumber(){ return allowedValues[new Random().next(allowedValues.Length)]; } Nếu đã chạy được thành công chục file thì em nghĩ do hai nguyên nhân +định dạng tên file imagematrick không hiểu,không có trong quy định của nó chẳng hạn +Kích cỡ ảnh cần xử lý không phù hợp Nên nó không nhận biết và xử lý được.
Hì bên trên em thấy anh bảo viết bằng C trước nên em tưởng trọn gói luôn.Nếu anh muốn viết riêng random với câu lệnh thì nó như dưới đây Code: #!/bin/bash function getNumerRandom(){ declare -a arr=("350" "315" "120") rand=$[$RANDOM % ${#arr[@]}] echo ${arr[$rand]} } getNumerRandom