Flatten imagem pdf transparente no linux usando a linha de comando

2

Estou usando o R para gerar gráficos com muitas camadas transparentes. Eu quero a saída como um pdf, mas os arquivos explodem quando há tantas camadas transparentes. Eu posso abrir manualmente cada um no GIMP e achatá-lo lá, mas eu gostaria de fazer isso através de uma chamada system() em R, para que o processo possa ser automatizado. Alguém sabe de uma maneira de fazer isso?

Aqui está um exemplo tolo reproduzível:

set.seed(2)
x = sort(runif(100))*10
y = rgamma(100,shape = x*rexp(100),scale=1/exp(rnorm(100)))
plot(x,y)
for (i in 1:200){
y = rgamma(100,shape = x*rexp(100),scale=1/exp(rnorm(100)))
fit = loess(y~x)
points(x,y,col=rgb(0,1,0,.3))
lines(x,predict(fit),col=rgb(1,0,0,.3))
}

Agora, quero poder fazer dev.copy2pdf(file="dumb_graph.pdf") e, em seguida, fazer system(something) para nivelar a imagem. Ou mais provável, um número de chamadas de sistema diferentes. Alguém sabe de algum utilitário que fará isso?

Editar: Estou procurando soluções específicas do Linux, mas acho que as soluções em outras plataformas seriam postagens úteis para outras pessoas que podem procurar por isso um dia.

Edit2: a saída deve ser vetor.

Edit3: isso é migrado do SO

    
por ACD 26.03.2014 / 01:47

1 resposta

0

Tem certeza do seu diagnóstico de que o arquivo PDF é grande devido à presença de "muitas camadas transparentes"?

Parece-me que poderia ser o grande número de objetos, no seu exemplo você tem 200x100 pares de coordenadas, o PDF é de 1,2 MB, então você está reclamando que cada par de coordenadas está usando 60B.

Em algum momento e para alguma resolução de destino (diferente para tela ou impressão, por exemplo), há um cruzamento entre a eficiência de armazenar gráficos vetoriais e gráficos de bitmap. Você pode exportar um PNG em vez de PDF no presente caso.

    
por 27.03.2014 / 14:56