2012-03-23 1 views
2

나는 킨들 서적 용으로 만든 html 파일들로 가득 찬 폴더를 가지고있다. 이미지는 킨 지침에 따라, 폭과 높이로 코딩되어Perl이나 Ruby에서 img 태그의 치수를 바꾸고 곱할 수 있습니까?

나는/발견을 만들 필요가있는 무엇
<img width="328" height="234" src="images/224p_fmt.jpeg" alt="224p.tif"/> 

는, 모든 이미지 태그를 처리 지정된 양에 의해 높이 속성 폭을 곱하는 스크립트입니다 (스크립트에 코드화되어 있음) html 파일에 다시 작성하십시오.

그래서, 위의 예를 들면, 나는 1.5를 곱하고 싶은 말은, 내 특기가없는이 같은

<img width="492" height="351" src="images/224p_fmt.jpeg" alt="224p.tif"/> 

스크립트와 바람, 너무 감사합니다 도움이됩니다. 나는 특히 명령 줄에서 파일을 실행할 수 있고 html을 입출력 할 수있는 스크립트를 작성하는 방법이 명확하지 않다.

은 내가 실현

s/<img width="([0-9]+)" height="([0-9]+)" src="(.*?)" alt=".*"/>/'<img width="'.$1*1.5.'" height="'.$2*1.5.'" src="'.$3.'" alt=""/>'/eg; 

가 감사 도움이 이유입니다 (곱셈 부분) 잘못된 무언가 같이 코드의 고기가 될 것입니다 가정합니다.

+0

파이썬은 괜찮습니까? 아니면 그냥 펄/루비? – FakeRainBrigand

답변

1

파이썬에서는 이렇게 할 것입니다.

import sys, re 

source = sys.stdin.read() 
def multi(by): 
    def handler(m): 
    updated = int(m.group(2)) * by 
    return m.group(1) + str(updated) 
    return handler 

print re.sub(r'((?:width|height)=["\'])(\d+)', multi(1.5), source) 

그런 다음 당신은 <>를 사용하여 같은 명령을 입력과 출력을 처리 할 수 ​​있습니다.

$ python resize.py <index.html> new_file.html 
+1

이 큰 예기치 않은 토큰 근처'구문 오류 '실패 그러나 이미지 너비의 인쇄물에 대한 선행 인용문을 벗어나기 때문에 오타가 있어야합니다. '224p.tif' – Steve

+0

괄호를 잘못 배치하여 첫 번째 하위 패턴에서 따옴표를 버렸습니다. 이제 작동합니까? – FakeRainBrigand

0

nokogiri 보석을 사용하여 HTML을 구문 분석하고 이미지 태그를 검색하고 폭 및 높이 속성을 추출한 다음 변경된 문서를 저장하여 저장할 수 있습니다.

자세한 내용은 nokogiri tutorial page.

+0

방금 ​​설치 한 nokogiri가 올바르게 설치되어있는 것으로 보이지만 다양한 자습서가 모두 실패합니다.예를 들어, 첫 번째 : 'html_doc = 노코 기리 :: HTML ("

씨 댐의 팬 클럽

")는' 는 ('' – Steve

0

네가 맞다. 작은 루비 스크립트로 할 수있다. 다음과 같이 보일 수 있습니다 :

source = '<img width="328" height="234" src="images/224p_fmt.jpeg" alt="224p.tif"/>' 
datas = source.scan(/<img width="([0-9]+)" height="([0-9]+)" src="(.*?)" alt=".*">/).flatten! 
source.gsub!(data[0], (data[0].to_i * 1.5).to_s) 
source.gsub!(data[1], (data[1].to_i * 1.5).to_s) 

물론 빠르고 완벽하지는 않지만 약간의 단점이 있습니다.

2

이미 정규 표현식을 알아 냈으므로 언어를 조정하고 언어를 결정해야합니다. html에 regexes를 사용하는 것은 최적은 아니지만 다소 간단하기 때문에 아마 괜찮습니다.

perl -pi.bak -we 's/<img width="([0-9]+)" height="([0-9]+)"/q(<img width=") . 
    $1*1.5 . q(" height=") . $2*1.5 . q(")/eg;' yourfile.html 

참고 쉘이 인용과 충돌 할 명령 줄에 작은 따옴표를 사용하여 이후 q(...)을 인용 대체의 사용.

엄격한 일치가 필요한 경우가 아니면 변경하지 않는 부분은 터치 할 필요가 없습니다. 이 부분은 대체에 의해 변경되지 않습니다

(?=\s*src=".*?"\s*alt=".*?"\/>) 

: 당신이 할 경우, 당신은 예견 주장을 추가 할 수 있습니다.

관련 문제