it-swarm-tr.com

kalite kaybı olmadan pdf'den jpg'ye; gscan2pdf

Bir pdf dosyasını kullanarak jpg dosyaları demet 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, hiçbir (göze çarpan) kalite kaybı olmaz:

Gscan2pdf uygulamasını başlatın, file-> import öğesini seçin (ve file.pdf dosyasını seçin). Sonra gscan2pdf geçici dizinine gidin. Birçok pnm dosyası vardır (pdf dosyasının her sayfası için bir tane). Şimdi yapıyorum

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

Ortaya çıkan jpg dosyaları (kabaca) orijinal pdf ile aynı kalitede (istediğim budur).

Şimdi sorum, pdf dosyasını dikkat çekici kalite kaybı olmadan bir sürü 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ıdır).

56
student

"Kalite kaybı" ile ne demek istediğiniz belli değil. Bu birçok farklı şey anlamına gelebilir. Örneklemek için bazı örnekler gönderebilir misiniz? Belki de aynı bölümü düşük kaliteli ve kaliteli sürümlerden ayırın (daha fazla kalite kaybını önlemek için PNG olarak).

Dönüşümleri daha yüksek bir dpi'de yapmak için -density Kullanmanız gerekebilir:

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

(Gerekirse -units PixelsPerInch Veya -units PixelsPerCentimeter Önüne ekleyebilirsiniz. Kopyam varsayılan olarak ppi'dir.)

Güncelleme: Belirttiğiniz gibi, gscan2pdf (Kullanma şekliniz) yalnızca pdfimages ( poppler ). pdfimages, girdi olarak PDF verildiğinde convert ile aynı şeyi yapmaz.

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

pdfimages, katıştırılmış bitmap görüntüler için PDF içine bakar ve her birini bir dosyaya aktarır. PDF'deki metin veya vektör çizim komutlarını yok sayar.

Sonuç olarak, sahip olduğunuz bir PDF ise bir bitmap serisinin etrafındaki bir sarıcıysa, pdfimages bunları çıkarmada çok daha iyi bir iş çıkarır, çünkü ham verileri alır orijinal boyutunda. Muhtemelen -j Seçeneğini pdfimages olarak kullanmak istersiniz, çünkü PDF ham JPEG verileri içerebilir. Varsayılan olarak, pdfimages her şeyi PNM formatına dönüştürür ve JPEG> PPM> JPEG dönüştürmek kayıplı bir işlemdir.

O zaman dene

pdfimages -j file.pdf page

Bunu convert - .jpg Adımıyla (PDF hangi bitmap biçimini kullandığına bağlı olarak) izlemeniz gerekebilir veya gerekmeyebilir.

Bu komutu kendimi bir JPEG resim dizisinden yapmış olduğum bir PDF üzerinde denedim. Çıkarılan JPEG'ler, kaynak görüntülerle aynı bayt-bayt idi. Bundan daha yüksek kalite elde edemezsiniz.

101
cjm

Öğrencinin cevabının dediği gibi pdfimages iyi bir seçenektir. Deneyimlerime göre, doğru dpi'yi belirtmenizden bağımsız olarak gs ve convert düşük kaliteye aktarılır.

Ancak pdf sayfa başına birden fazla katmana sahipse pdfimages çalışmaz ve katmanları ayrı bir görüntü olarak çıkarırsa, bu durumda en iyi şekilde görüldüğü gibi sayfayı dışa aktarmak için inskcape kullanmaktır.

Kullandığım komutlar şunlardır:

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ı böler ikinci komut sayfa sayfa png dönüştürür. Onları png olarak saklayabilir veya sadece jpeg'e dönüştürebilirsiniz

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

pdfimages, gs ve ImageMagick'in convert ile karşılaştırıldığında inkscape 'nin en iyi kaliteyi ihraç ettiğini düşünüyorum.

4

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

Gimp ile bir pdf açın ve tüm sayfaları işlenmiş bir içe aktarma penceresi alacaksınız. İstediğiniz sayfaları seçin ve çözünürlüğü 600 piksel/inç olarak ayarlayın (Birçok durumda 300'den fazla netlik buldum). "Dosya/dışa aktar" ile istediğiniz biçime kaydedin

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

3
albfan

Gscan2pdf kaynak koduna baktığımda pdfimages kullandığını fark ettim. Dolayısıyla pdfimages file.pdf page, page-001.ppm, page-002.ppm Vb. İle sonuçlanacaktır.

2
student

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

Gscan2pdf ne hakkında okuduktan sonra, tahminim pdf dosyaları (sadece) gömülü grafikler içeriyor olmasıdır.

convert pdf'nizi içeriklerin ne olduğuna bakmaksızın "yazdırır". @Cjm'nin önerdiği gibi, baskı yoğunluğunu değiştirmek isteyebilirsiniz. Vektör grafikleri için kaliteyi artırmanın tek yolu budur.

Bunun yerine, yapmak istediğiniz şey gömülü görüntüleri çıkarmaktır (gscan2pdf gibi), yoğunluğu tahmin etmek genellikle kalite kaybına veya gerekenden daha yüksek kaliteye (ve disk alanı israfına) yol açar. Bu sorunun cevabı, pdf yazdırmak yerine görüntüyü çıkarmaktır. Bu makaleye bakın temelde pdfimages kullanımını kalite kaybı olmadan çıkarmak için kullanılır.

2
asoundmove