kalite kaybı olmadan jpg için pdf; gscan2pdf


51

Bir pdf dosyasını kullanarak jpg dosyalarını demetine dönüştürdüğümde

convert -quality 100 file.pdf page_%04d.jpg

Kayda değer kalite kaybım var.

Ancak, aşağıdakileri yaparsam (gözle görülür) kalite kaybı olmaz:

Gscan2pdf'yi başlatın, file-> import'u seçin (ve file.pdf'yi seçin). Sonra geçici gscan2pdf dizinine gidin. Çok sayıda pnm dosyası var (pdf dosyasının her sayfası için bir tane). Şimdi yapıyorum

  for file in *.pnm; do            
  convert $file $file.jpg done

Elde edilen jpg dosyaları (kabaca) orijinal pdf (istediğim şey) ile aynı kalitededir.

Şimdi sorum şu, fark edilebilir kalite kaybı olmadan pdf dosyasını bir grup jpg dosyasına dönüştürmek için basit bir komut satırı yolu varsa? (Yukarıdaki çözüm çok karmaşık ve zaman alıcı).


Sorularınızda net olmayan şey, pdf'inizdeki metin ve vektör grafikleri hakkında mı konuşuyorsunuz, ya da gömülü görüntüleri çıkarmak mı istiyorsunuz?
asoundmove

Yanıtlar:


92

"Kalite kaybı" ile ne demek istediğinizi açık değil. Bu çok farklı anlamlara gelebilir. Göstermek için bazı örnekler gönderebilir misiniz? Belki de aynı bölümü düşük kaliteli ve kaliteli sürümlerden kesip (daha fazla kalite kaybını önlemek için bir PNG olarak).

Belki -densitydaha yüksek bir dpi ile dönüşüm yapmak için kullanmanız gerekir :

convert -density 300 file.pdf page_%04d.jpg

(Hazırlayabilirsiniz -units PixelsPerInchveya -units PixelsPerCentimetergerekirse. Kopyam varsayılan olarak ppi'dir.)

Güncelleme: Belirttiginiz gibi, gscan2pdf( kullandiiniz yol ) sadece pdfimages( poppler'den ) için bir sargidir . Giriş olarak bir PDF verildiğinde pdfimagesaynı şeyi convertyapmaz.

convert PDF'yi alır, bir çözünürlükte işler ve elde edilen bitmap'i kaynak görüntü olarak kullanır.

pdfimagesgömülü bitmap görüntüler için PDF'yi arar ve her birini bir dosyaya aktarır. Basitçe, PDF'deki herhangi bir metni veya vektör çizim komutunu yoksayar.

Sonuç olarak, eğer sahip olduğunuz bir seri bitmaplerin etrafına sarılmış bir PDF ise, pdfimagesbunları çıkarmak daha iyi bir iş çıkarır, çünkü ham verileri orijinal boyutunda alır. Muhtemelen bir PDF ham JPEG verisi içerebildiği için bu -jseçeneği de kullanmak istersiniz pdfimages. Varsayılan olarak, pdfimagesher şeyi PNM formatına dönüştürür ve JPEG> PPM> JPEG'e dönüştürmek kayıplı bir işlemdir.

O zaman dene

pdfimages -j file.pdf page

Sen ya da o izlemeniz gerekir olmayabilir convertiçin .jpg(PDF kullanıyordum biçimlendirmek bitmap şeye bağlı) adım.

Bu komutu, kendimi bir JPEG görüntü dizisinden yaptığım bir PDF'de denedim. Çıkarılan JPEG'ler, kaynak görüntülerle aynı bayt bayttı. Bundan daha yüksek bir kalite elde edemezsiniz.


+1 Cümlelerinizden birinin bana ilham vermesi ve aslında aylardır kullandığım en faydalı program olan pdfimages'i denemeye başlamamış olmama çok sevindim! Herkesi denemeye teşvik ediyorum!
ixtmixilix

@ixtmixilix, merak ediyorum. Neyi yanlış yaptın ve nasıl?
cjm

Oldukça harika! Günümü çözdüm. Teşekkür ederim!
Geppettvs D'Constanzo

convertayrıca büyük PDF'ler için pratik değildir. Örneğin, 700 6 megapiksel sayfadan oluşan bir kitabı işlemek 45 GB belleği aldı. Ayrıca ondan binlerce kat daha uzun sürdü pdfimages.
Camille Goudeseune

Diğer taraftan, görüntüleri bir pdf'ye dönüştürün veya daha iyi bir şekilde görüntüleri bir pdf'e sarın, burada img2pdf kullanın: gitlab.mister-muffin.de/josch/img2pdf (jpg ve jpg2000'i pdf olarak sarar).
erik

4

Öğrencinin cevabını söylediği gibi pdfimagesiyi bir seçenek. Tecrübelerime hem itibaren gsve convertdoğru dpi belirtirseniz bakılmaksızın kalitesiz aktarma.

Ancak, pdf sayfa başına birden fazla katmana pdfimagessahip değilse, çalışmaz ve katmanları ayrı görüntü olarak ayıklarsa, bu durumda inskcapesayfayı görüldüğü gibi dışa aktarmak için en iyisidir .

Kullandığım komutlar:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

İlk komut tüm sayfaları ayırır, ikinci komut sayfa sayfa png'ye dönüştürülür. Onları png olarak tutabilir veya sadece jpeg haline getirebilirsiniz

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Karşılaştırıldığında pdfimages, gsve ImageMagick en convertbuluyorum inkscape'in kalitesinde en iyi ihracat.


3

@cjm'den gelen yanıt doğrudur, ancak GUI'den hoşlanıyorsanız ve tüm pdf sayfalarını oluşturmak istemiyorsanız, yalnızca bir görüntü elde etmek için gimp kullanın.

Gimp ile bir pdf açın ve tüm sayfaların görüntülendiği şekilde bir içe aktarma penceresi açılır. İstediğiniz sayfaları seçin ve çözünürlüğü 600 pix / inç olarak ayarlayın (birçok durumda 300 fazla netlik buldum). "Dosya / İhracat" ile istediğiniz formatı kaydedin

Yine de, istenen sayfaları komut satırından seçmek için bir bayrak olmalıdır.


2

Gscan2pdf kaynak koduna bakıldığında, pdfimages kullandığını fark ettim. Böylece vb pdfimages file.pdf pagesonuçlanırdı page-001.ppm, page-002.ppm.


pdfimages işi gerçekten yapıyor
Eduard Florinescu

2

Sorunuzda net olmayan, pdf'inizdeki metin ve vektör grafikleri hakkında konuşup konuşmamanız veya pdf'inizin gömülü görüntüler içerip içermediğidir.

Gscan2pdf'nin ne hakkında olduğunu okuduktan sonra, benim tahminim, pdf dosyalarınızın (yalnızca) gömülü grafikler içerdiğidir.

convertaslında pdf'inizi içeriğin ne olduğuna bakılmaksızın "yazdırır". @Cjm'nin önerdiği gibi, baskı yoğunluğunu değiştirmek isteyebilirsiniz. Vektör grafikleri için kaliteyi arttırmanın tek yolu budur.

Bunun yerine, yapmak istediğiniz şey gömülü görüntüleri ayıklamaktır (gscan2pdf gibi görünüyor), yoğunluğun tahmin edilmesi genellikle kalite kaybına veya gerekenden daha yüksek kaliteye (ve disk alanı israfına) yol açar. Bunun cevabı pdf yazdırmak yerine görüntüyü çıkarmaktır. Kalite kaybı olmadan görüntüleri elde etmek için kullanımını temelde destekleyen bu makaleye bakınpdfimages .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.