Pembuatan thumbnail dengan imagemagick tidak menghasilkan warna yang benar

4

Membuat thumbnail PDF dengan imagemagick terkadang membuat warna yang salah. Kami menggunakan versi imagemagick lama (6.5.7-8, itu adalah versi yang diinstal pada server heroku). Ini adalah perintah yang saat ini kami gunakan:

convert \
  -size "725x1200>" \
  -colorspace RGB \
  -flatten \
  -density 300 \
  -quality 100 \
   input.pdf \
   output.jpg

Saya sudah mencoba menggunakan berbagai ruang warna seperti sRGB, YIQ, .. tetapi tidak satupun dari mereka yang merender warna dengan benar.

Menggunakan imagemagick-6.7.7-6 berfungsi secara lokal jadi saya sudah mencoba untuk menggabungkan perintah 'convert' di dalam direktori aplikasi / bin saya, perintah itu berfungsi tetapi hasilnya masih salah, jadi sepertinya masalahnya berasal dari imagemagick lain perintah yang digunakan oleh 'convert' atau dari perpustakaan lain.

Berikut adalah contoh dari output:

  • Output yang benar: di sebelah kiri
  • Output salah: di sebelah kanan
    Output yang benar Output salah

Anehnya, dengan beberapa halaman pdf yang sama hasilnya selalu benar. Adakah gagasan perpustakaan atau perintah mana yang bisa menjadi masalah, atau jika ada serangkaian opsi yang tepat untuk diteruskan ke imagemagick untuk selalu memperbaikinya?

Bastien
sumber
Sepertinya hampir tidak begitu banyak warnanya salah ... karena sepertinya mengubah palet gambar 16 atau 32 bit menjadi palet 256 warna ... setidaknya dari contoh yang Anda berikan. Tidak hanya nada berubah menjadi hijau cerah, tetapi teks buram sedikit tajam (tidak terbaca, tetapi seolah-olah ada lebih sedikit nuansa abu-abu). Waktu yang tampaknya berhasil mungkin karena warna spesifik itu sendiri, atau kurangnya warna yang berbeda?
Bon Gart
Terima kasih untuk pointer Bon, saya benar-benar mencoba mengatur -colors 32tetapi tidak berhasil. Dari asumsi bahwa imagemagick menggunakan ghostscript saya kemudian mencoba untuk melihat output langsung dari itu gs -dNOPAUSE -sDEVICE=jpeg -r144 -sOutputFile=out.jpg in.pdfuntuk mengidentifikasi ruang warna. Outputnya sudah salah! Melewati -dUseCIEColorperbaikan itu. Tapi bagaimana saya bisa memberi tahu imagemagick untuk meneruskan opsi ini ke gs?
Bastien
@ kurt-pfeifle terima kasih telah menambahkan gambar di sana, saya tidak punya cukup poin reputasi untuk melakukannya sendiri
Bastien

Jawaban:

2

Setelah beberapa penyelidikan lebih lanjut, tampaknya masalahnya berasal dari ghostscript yang tidak ada -dUseCIEColoropsi. Dan dari apa yang saya kumpulkan di web, tidak mungkin untuk mengirimkan parameter ke ghostscript melalui imagemagick. Apa yang mungkin dilakukan adalah memanggil 2 perintah bersamaan dengan sebuah pipa: https://stackoverflow.com/questions/653380/converting-a-pdf-to-png

Kasus penggunaan khusus saya

Ini sedikit lebih spesifik untuk kasus penggunaan saya, tetapi saya pikir seseorang mungkin tertarik. Saat kami membuat thumbnail melalui Penjepit Kertas di aplikasi rel kami, saya membuat prosesor penjepit kertas baru untuk menangani konversi pdf ke jpg dan kemudian imagemagick mengambil alih untuk melakukan pengubahan ukuran seperti biasa. Kode saya dengan contoh di sini: https://gist.github.com/3059321

Bastien
sumber
Mengapa Anda perlu mengolah JPEG dengan imagemagick sama sekali? Tidak bisakah Anda menambahkan semua params ke Ghostscript sehingga Anda mendapatkan ukuran yang Anda inginkan?
Kurt Pfeifle
'... mungkin untuk memanggil 2 perintah bersamaan dengan sebuah pipa ...' - Tetapi Anda tidak membatalkan jawaban ini, eh? :-)
Kurt Pfeifle
Poin bagus, terangkat sekarang;) Tentang hanya menggunakan ghostscript, saya kira saya bisa, seperti yang saya katakan, dalam kasus spesifik saya Paperclip secara otomatis melakukannya untuk saya, tetapi mungkin ada cara untuk hanya menjalankan prosesor ghostscript.
Bastien