스캔 한 PDF 파일의 파일 크기를 어떻게 줄일 수 있습니까?


372

500KB 미만으로 축소해야하는 72.9MB PDF 파일이 있습니다.

파일은 스캔 한 JPEG 이미지이며 pdf로 변환되었습니다.


1
그것은 공간을 소비하는 것에 달려 있습니다 ... 더 많은 정보가 필요합니다. 이미지 공간을 압축하면 도움이 될 수 있지만 큰 파일 힙 스프레이를 시도하면 작동하지 않습니다. 더 많은 정보가 필요합니다.
RobotHumans

1
불가능한 크기의 PDF로 축소하려고 시도하는 대신 DjVu로 변환 (소스에
따름

파일은 내가 스캔 한 jpeg 이미지이며 pdf로 변환되었습니다.
tamimym

파일 화는 약간만 도와주는 것처럼 보이지만 pdfopt간단한 구문을 가지고 있으며 iPad 시대의 로딩 및 페이지 넘김 속도를 향상시킵니다. :-)
Ari B. Friedman

1
PS에서 PDF로 스캔 한 PDF 파일에서는 효과가 없습니다.

답변:


145

aking1012가 옳습니다. 임베드 된 이미지, 하이퍼 링크 등에 대한 자세한 정보가 있으면이 질문에 대한 답변이 훨씬 쉬워집니다!

다음은 몇 가지 스크립트 및 명령 줄 솔루션입니다. 적합하다고 생각되는대로 사용하십시오.


15
당신의 제안을 주셔서 대단히 감사합니다, 고스트 스크립트 쉘은 놀라운 일을하고 :) 460킬로바이트에 아래로 감소했다
tamimym

반드시 그런 것은 아닙니다. 내용이 이미지에서 텍스트로 간다면, 그 이상의 가능성이 있습니다. [그 내용이 정확하게 발표되었다고 가정합니다]
monksy

2
shrinkpdf.sh 스크립트를 권장합니다. 원하는 ppi 값 (기본적으로 72)을 사용하도록 코드를 사용자 정의하고 최소 품질을 희생하는 데 필요한 파일 크기에 정확하게 도달 할 수 있습니다. 이를 통해 최대 11MB의 스캔 문서를 업로드 할 수있었습니다. 많은 품질을 잃지 않고 3MB 크기.
Severo Raz

4
shrinkpdf는 훌륭하게 작동합니다!
AmanicA

2
OP가 askubuntu.com/questions/113544/…를 참조하는 고스트 스크립트 쉘은 어디에 있습니까 ?
user13107

519

다음 고스트 스크립트 명령을 사용하십시오 .

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screen품질이 낮고 크기가 작습니다. ( 72 dpi )
  • -dPDFSETTINGS=/ebook더 나은 품질을 위해, 그러나 약간 더 큰 pdf. ( 150 dpi )
  • -dPDFSETTINGS=/prepressAcrobat Distiller "Prepress Optimized"설정과 유사한 출력 ( 300 dpi )
  • -dPDFSETTINGS=/printerAcrobat Distiller "인쇄 최적화"설정과 유사한 출력을 선택합니다 ( 300 dpi ).
  • -dPDFSETTINGS=/default 더 큰 출력 파일을 희생시키면서 다양한 용도에 유용한 출력을 선택합니다.

5
이것이 정답입니다. ghostscript는 유니스를 위한 PDF, XPS 및 PS 구현이며 기본적으로 최상의 품질을 제공하는 모든 것을 할 수 있습니다.
dom0

7
@Sina : 실제로 모든 품질 수준 옵션과 함께이 gs 명령을 사용하는 간단한 Zenity 기반 GUI가있는 노틸러스 스크립트가 있습니다 : launchpad.net/compress-pdf
Sadi

36
이것은이 질문에 대한 정답입니다 (주로 비트 맵 데이터 인 PDF 압축). 나는 것을 발견 screen설정은 나를 위해 너무 낮은 품질했지만, ebook3.6MB로 아래로 33MB 스캔 기반 PDF를 절단하고 가독성을 유지 잘했다. 옵션에 대한 다른 옵션은 milan.kupcevic.net/ghostscript-ps-pdf에-dPDFSETTINGS 나와 있으며이 답변에 포함시키는 것이 좋습니다.
naught101

5
GS 사용할 수 구성 매개 변수 : ghostscript.com/doc/current/Ps2pdf.htm
안토니오스 Hadjigeorgalis

3
17.10에 그것은 127 mb에 42 mb pdf를 만들었다 : (
YaSh Chaudhary

156

내가 가장 좋아하는 방법은 pdf를 ps로 변환하고 다시 변환하는 것입니다. 항상 작동하지는 않지만 작동하면 결과가 좋습니다.

ps2pdf input.pdf output.pdf

이것은 주석에서 제안한 바와 같이 pdf에서도 직접 작동합니다.

일부 사용자는 다음과 같이 전자 북 설정 을 사용할 때 더 많은 성공을보고 합니다.

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 

4
이것은 매우 간단하고 효과적인 방법입니다. 이 방법이 파일을 얼마나 압축했는지 알고 놀랐습니다. 감사합니다!
Gabriel

16
이 한 가지 접근 방식이 pdf 파일을 압축하는 가장 좋아하는 솔루션이 되었음에도 불구하고 문서에있을 수있는 URL 링크를 끊습니다 (@Michael D의 접근 방식에서는 발생하지 않음). 그 외에도,이 스 니펫을 실행한다고 생각할 수있는 것은 최고입니다! (:
Rubens

1
@Rubens 아. 그것이 URL 링크를 깨뜨린다는 사실에 대해 몰랐습니다. 추가해 주셔서 감사합니다.
don.joey

3
이것은 암호 보호를 우회합니다 ... 그냥 말하십시오
jojo

8
ps2pdf는 pdf를 입력으로 사용하므로 한 번에이 작업을 수행 할 수 있습니다.ps2pdf intput.pdf output.pdf
frabjous

127

당신이있는 경우 스캔 한 이미지와 PDF 파일을 , 당신이 사용할 수 convert있는 PDF 만들기 위해 JPEG 압축을 (당신은 어떤 PDF 파일에이 방법을 사용할 수 있습니다,하지만 당신은 모든 텍스트 정보를 잃어 버릴 것이다).

예를 들면 다음과 같습니다.

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

필요에 따라 밀도 (예 : 100x100) 및 품질 을 조정 하십시오.

입력 jpeg 압축 에 따라 압축 아티팩트로 인해 최선의 선택이 아닐 수 있습니다. 대체 압축 방법으로 BZip, 팩스, Group4, JPEG, JPEG2000, Lossless, LZW, RLE 또는 Zip 중에서 선택할 수 있습니다 (일부는 흑백 이미지 만 허용). 자세한 내용은 여기를 참조 하십시오 .

설정에 따라 스캔 / 사진 문서의 압축률을 크게 높일 수있었습니다. 문서 소스에 따라 색 농도 ( -depth인수) 를 줄일 수 있습니다 .


3
이미지보다는 텍스트가 관심있는 텍스트 인 스캔 문서의 경우 깊이와 깊이를 유지하는 것이 문제가되지 않으면 아티팩트가 눈에 띄게 나타나기 때문에 jpeg 압축은 좋지 않습니다. pdfimages input.pdf pagespbm 파일을 추출 하는 데 사용 하는 경우 다음과 같은 작업을 수행 할 수 있습니다 for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf. 모든 OCR이 손실되므로 일반적으로을 수행 pdfsandwich output.pdf하면 파일 크기가 훨씬 줄어 듭니다.
브라이언 Z

1
@BrianZ jpeg 압축이 항상 최선의 선택은 아니지만 혼합 유형 문서에 가장 적합한 방법이었습니다. 다른 압축 방법에 대한 정보를 답변에 추가했습니다.
someonr

2
이 방법은 궁극적으로 gs뒤에서 사용 합니다.
alfC

2
--density --quality --compressvs 명령을 실행하는 옵션에 이중 대시를 사용해야했습니다 -density -quality -compress.
Rotareti

1
이미지 qaulity가 가장 중요하지 않은 경우 (그리고 전송하기에 충분히 작은 dang 전자 메일 첨부 파일을 가져 -resize 50%
오려는 경우)

41

문서의 풀 컬러 스캔이 포함 된 PDF의 크기를 줄여야했습니다. 내 페이지 각각은 파일에 관한 한 풀 컬러 이미지였습니다. 텍스트와 이미지가 포함 된 페이지의 이미지이지만 이미지로 스캔하여 만들어졌습니다.

아래 고스트 스크립트 명령과 다른 스레드의 명령을 조합하여 사용했습니다.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

이렇게하면 이미지 해상도가 150dpi로 줄어들어 파일 크기가 반으로 줄었습니다. 문서를 살펴보면 이미지 품질이 거의 눈에 띄지 않았습니다. 내 2012 Nexus7에서 텍스트를 계속 읽을 수 있습니다.


3
이미지를 다운 샘플링하지만 텍스트를 벡터로 유지하려면 +1입니다. 내 텍스트를 픽셀 화하지 않고 측면에서 큰 차이를 만들었습니다.
Jason O'Neil

이 날 = \ 화면 바로 사용 dPDFSETTINGS보다 더 나은 결과를 준 - 하나의 캔 조정 명령으로 해상도가 환상적인
교환을

29

스캔 한 PDF를 다시 작성 하는 스크립트는 다음과 같습니다 .

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

재사용 성을 높이기 위해 약간 사용자 정의 할 수 있지만 하나의 pdf 만 있으면 $1pdf 파일 이름으로 바꾸고 터미널에 넣을 수 있습니다 .


1
감사합니다. Oli. 당신은 지금까지 여기에서 요청한 거의 모든 것에 대답했습니다. :-D
Rob Cowell

이것은 좋은 대답이지만 제 경우 에는 다소 큰 (> 10Mb) PDF 파일 (1 분 이상)을 변환하는 데 시간이 많이 걸립니다 .
Gabriel

어떻게되는지 잘 모르겠지만 30MB PDF는 68MB 파일을 생성합니다. 축소하는 대신 확대됩니다. 다음 답변에 명시된대로 ps2pdf를 직접 사용하는 경우 동일한 출력.
Ed Villegas

@EdVillegas 내가 생각할 수있는 유일한 것은 (그런 종류의 증가를 설명하기 위해) 이미지가 생성되는 이미지 (72dpi)보다 해상도가 낮다는 것입니다. 또는 어떻게 든 글꼴을 포함하면 모든 글꼴이 빨라 집니다.
Oli

21

나는 일반적으로 ps2pdf를 사용하여 다음과 같이 (더 쉬운 구문)을 수행합니다

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

다음 파이썬 스크립트를 사용하여 프로덕션 서버 (8.04)의 디렉토리에있는 모든 pdf 파일의 크기를 줄입니다. 그래서 작동해야합니다.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))

대체 솔루션에 감사드립니다. 나는 Oli의 첫 번째 시도를 해보았 고 필요한 결과를 얻었지만 나중에 참조 할 수 있도록 이것을 유지할 것입니다.
Rob Cowell

1
-dPDFSETTINGS = / 프린터 옵션은 50 % 크기 조정을 수행합니다. 전자 책은 90 % 크기를 조정합니다.
neouyghur

17
  1. 내가 사용 LibreOffice와 그리기를 PDF를 엽니 다.
  2. 그런 다음 "pdf로 내보내기"
  3. "jpeg 압축 품질"을 50 %로 설정하고 "이미지 해상도"를 150dpi로 설정하십시오.

이것은 좋은 결과를 가져올 것입니다.


문제에 대한 최악의 해결책! 내 파일을 완전히 엉망으로 만들었습니다!

9

나를 위해 최고였다

convert -compress Zip -density 150x150 input.pdf output.pdf

다른 방법들:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

문안 인사


훌륭한 솔루션. 기억하기 쉽고 가독성이 크게 떨어지지 않으면 서 내 PDF를 32MB에서 3.5MB로 가져 왔습니다.
Immanuel Weihnachten

나는 두 번째 방법을 좋아했습니다 pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
McPeppr

5

방금이 문제가 발생했습니다. 단순 스캔을 사용하는 경우 저해상도 스캔을 위해 텍스트 모드를 선택하면 명령 줄에 대해 걱정할 필요가 없습니다. 그냥 말하면


1
이것은이 스레드에서 내 문제를 해결 한 단일 답변입니다. 나는 Simplescan을 다운 플레이했지만 끝없는 고통으로 보였던 Xsane과의 싸움 대신에 실제로 대답했습니다.
versvs

4

압축 품질을 제어하십시오.

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}

... 입력과 출력이 모두 같은 주장입니까? 사용 지침을 추가 할 수 있습니다.
mikewhatever

2
를 참고하십시오 shift. 첫 번째 매개 변수는 입력 파일이고, 두 번째 매개 변수는 출력 파일이며 나머지 매개 변수는 그대로 전달됩니다 gs.
Mikko Rantalainen 2016 년

나는 당신이 원하는 생각 / HSample 및 / VSample S ,하지 / HSample 및 / VSample. 예를 들어 ps2pdf 문서 또는 PostScript 언어 참조 매뉴얼을 참조하십시오. 또한 허용되는 QFactor 범위는 0 ~ 1,000,000이며 값이 낮을수록 품질이 높아집니다.
Pont

3

Google에서 검색 할 때이 링크가 처음 이었으므로 한 가지 가능성을 더 추가 할 것이라고 생각했습니다. 위의 솔루션 중 Inkscape (15 mb)에서 내 보낸 PDF에서 나에게 도움이되지는 않았지만 김프에서 열고 pdf로 다시 내 보내면 1 mb로 축소 할 수 없었습니다.

가까운 또 다른 옵션 (그러나 텍스트가 약간 애매했습니다)은 ImageMagick의 변환 유틸리티였습니다.

convert -compress Zip input.pdf output.pdf

나는 이것이 당신이 "약간 희미한 것"의 의미라고 생각하지만, 명확히하기 위해 convert -compress Zip모든 벡터를 래스터 화하는 것처럼 보였습니다.
Sparhawk

3

결국 나는 이것을 해결하기 위해 내 자신의 bash 스크립트를 썼다 mogrify. convert그리고 그것을 사용 하고 gspdf 페이지를 png로 추출 하고 , 크기를 조정하고, 1 비트 bmp로 변환 한 다음 pdf로 다시 작성하십시오. 파일 크기 감소는 90 %를 초과 할 수 있습니다. http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php 에서 제공됩니다 .


3

pdfsizeopt를 강력히 권장 합니다 .

내가 시도 그 이전 CLI 및 GUI 소프트웨어의보다 크기가 감소 (포함의 측면에서 훨씬 더 효율적이다 convert, gs, pdftk비록 가능성이 느린와 -, 등) pngout활성화 -, 그 문제의 일부 (더 크게이 없습니다 픽셀 화 된 / 저하 된 이미지, 북마크 손실 등).

이제 결과가 읽을 수없는 수준으로 저하되는 등의 결과에 관계없이 특정 크기를 달성해야하는 경우, 필요한 도구는 아니지만 항상 작동하는 솔루션으로 불필요한 큰 크기를 줄입니다. 가독성, 정보 및 수용 가능한 이미지 품질을 잃지 않고 PDF에서 가장 좋은 옵션이라고 생각합니다. (참고 : 일부 스캔 한 텍스트 문서에 큰 크기의 영향을 줄 수있는 Adobe Acrobat (이전에는 "CleanScan"이라고하는 기능)에서 벡터화 OCR을 수행 한 후에 사용하는 경향이 있습니다.)


나는 일반적인 유닉스 설치를 추천한다 :

  1. 필요한 모든 종속성을 설치하십시오.

  2. 실행 파일을 다운로드하여 설치하십시오.

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

용법:

pdfsizeopt original.pdf [compressed.pdf]

이 게시물을 찾는 Mac 사용자 (또는 Linuxbrew 사용자)를 위한 참고 사항 : Homebrew 설치 공식이 있습니다.

brew install --HEAD pts/utils/pdfsizeopt

2

나는 같은 문제에 직면하고 있었고이 실을 발견하게되어 기뻤습니다. 특히 스캔 한 이미지에서 pdf 파일을 생성했으며 바이트 크기를 6 배로 줄여야했습니다.

불행히도, 위의 해결책 중 어느 것도 효과가 없었습니다. 그러나 pdf의 크기는

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

필자는 결과적으로 하나의 압축 단계와 크기 조정을 모두 수행 한 "convert"명령을 사용하여 원하는 결과를 얻었습니다.

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

doc_orig의 밀도는 72x72dpi입니다.


1

djvu로 변환해도 문제가없고 색상이 포함되지 않으면 다음을 시도해보십시오.

를 사용하여 pdf를 jpg 파일로 변환 pdfimages -j

대신 pbm 파일을 얻는 경우 중간 단계를 수행해야합니다.

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

convert 명령은 imagemagick 패키지에 있습니다.

그런 다음 scantailor 를 사용 하여 tif를 제거하십시오.

마지막 단계에서는 tif가있는 direcory스캔 하여 djvubind 를 해당 디렉토리에 적용 합니다.

이렇게하면 텍스트 품질이 크게 저하되지 않으면 서 파일 크기가 크게 줄어 듭니다. ocr-backend를보다 세밀하게 제어 djvubind --no-ocr하려면 나중에 ocrodjvu를 사용하여 ocr 레이어를 추가 할 수 있습니다 .

문서에 색상이 있으면 조금 더 복잡해집니다. 대신에 djvubind 당신은 사용할 수 didjvu을 하고 scantailor에 당신은 혼합 모드로 변경하고 수동으로 때로는 컬러 이미지를 선택해야합니다.


1

이미지 나 pdf 파일을 inkscape에로드하십시오.

inkscape에서 : 벡터 형식 (기본 .svg)으로 저장하십시오.

벡터 파일을 scribus로 가져 오기, 레이아웃 편집 및 거기서 .pdf로 내보내기 / 저장


0

슈퍼 간단한 PDF 압축 도구 : GitHub 페이지.

우분투 설치 :

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

고스트 스크립트를 사용합니다.


0

당신은 이것을 시도 할 수 있습니다 :

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

gs이 경우 107.5MiB 입력 파일의 경우 보다 빠르지 만 최대 30 %까지 압축합니다.


0

나에게 gs screen옵션이 너무 나빴고 ebook너무 큰 옵션이었습니다 .

원본 문서에는 페이지에 따라 컬러 및 흑백 이미지로 텍스트가 포함되어 있습니다.

내가 찾은 가장 좋은 해결책은 다음과 같습니다.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

압축 수준은 선형이 아닙니다. 135를 지정하면 압축되지 않았으므로 130은 압축을 달성하는 최대 해상도 인 것으로 나타났습니다.


-1

아래 명령을 사용했지만 pdf 파일을 크게 압축하지 않았습니다. 압축 후 부분의 일부가 검게 변하는 경우가 있습니다.

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

웹을 너무 많이 방황 한 후 올바른 압축 라이브러리를 찾을 수 없었습니다. 나는 건너왔다 pdfcompressor.com. 이것은 멋진 웹 사이트입니다. pdf를 95 % (15Mb 파일) 압축합니다. 그래서 나는 셀레늄과 Tor를 사용하여 압축을 자동화했습니다. 내 Github Repository를 확인하십시오. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.