<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hidas salamablogi &#187; lightroom</title>
	<atom:link href="http://www.mantynen.com/teemu/avainsanat/lightroom/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mantynen.com/teemu</link>
	<description>Hyvä sää on makuasia. Vain hengenvaarassa tietää elävänsä.</description>
	<lastBuildDate>Thu, 19 May 2011 07:04:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel="next" href="http://www.mantynen.com/teemu/avainsanat/lightroom/feed/?page=2" />

		<item>
		<title>Adobe Lightroom and non-catalogued photos</title>
		<link>http://www.mantynen.com/teemu/lightroom-non-cataloqued-photos/</link>
		<comments>http://www.mantynen.com/teemu/lightroom-non-cataloqued-photos/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 19:18:35 +0000</pubDate>
		<dc:creator>Teemu</dc:creator>
				<category><![CDATA[foss]]></category>
		<category><![CDATA[valokuvaus]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[lightroom]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.mantynen.com/teemu/?p=211</guid>
		<description><![CDATA[From time to time, when I intend to remove an image from Lightroom and delete it from disk, I hit a wrong button and end up to just remove it from Lightroom. So I wrote this small and simple PHP-script.]]></description>
			<content:encoded><![CDATA[<p>From time to time, when I intend to remove an image from Lightroom and delete it from disk, I hit a wrong button and end up to just remove it from Lightroom. The unwanted image file itself stays on my hard drive and reserves precious disk space.</p>
<p>It is very labourous to manually find and delete those orphaned files. I&#8217;m not aware of any Lightroom function or utility which would do it on my behalf. So I wrote this small and simple PHP-script to help the job.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* This PHP5 CLI script iterates recursively through a directory tree and looks</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* for image files, which it then tries to find in an Adobe Lightroom 2 catalog.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* If image is not found in Lightroom, its path and filename are printed out.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Note that I have a dualbooting computer. I use Lightroom on Windows but I run</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* this script on Linux.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* My Linux mount points &#39;/media/win&#39; and &#39;/media/fat&#39; equal to Windows drive</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* letters &#39;C:&#39; and &#39;E:&#39;.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @author &nbsp;Teemu Mäntynen</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @link &nbsp; &nbsp;http://www.mantynen.com/teemu/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @license BSD http://www.opensource.org/licenses/bsd-license.php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* This software is provided &quot;AS IS&quot;. NO WARRANTY. USE AT YOUR OWN RISK.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Path to root of photo directories</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$path</span> <span class="sy0">=</span> <span class="kw3">realpath</span><span class="br0">&#40;</span><span class="st0">&#39;/media/fat/kuvat/foto/raw&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Adobe Lightroom SQLite3 catalog file</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$db</span> <span class="sy0">=</span> <span class="kw2">new</span> PDO<span class="br0">&#40;</span><span class="st0">&#39;sqlite:/media/win/Documents and Settings/teemu/My Documents/My Pictures/Lightroom/Lightroom 2 Catalog.lrcat&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Image file filename extensions</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$imgFileExtensions</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#39;jpg&#39;</span><span class="sy0">,</span> <span class="st0">&#39;jpeg&#39;</span><span class="sy0">,</span> <span class="st0">&#39;tif&#39;</span><span class="sy0">,</span> <span class="st0">&#39;tiff&#39;</span><span class="sy0">,</span> &nbsp;<span class="st0">&#39;psd&#39;</span><span class="sy0">,</span> <span class="st0">&#39;bmp&#39;</span><span class="sy0">,</span> <span class="st0">&#39;3fr&#39;</span><span class="sy0">,</span> <span class="st0">&#39;raf&#39;</span><span class="sy0">,</span> <span class="st0">&#39;crw&#39;</span><span class="sy0">,</span> <span class="st0">&#39;cr2&#39;</span><span class="sy0">,</span> <span class="st0">&#39;k25&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#39;kdc&#39;</span><span class="sy0">,</span> <span class="st0">&#39;dcs&#39;</span><span class="sy0">,</span> <span class="st0">&#39;dcr&#39;</span><span class="sy0">,</span> <span class="st0">&#39;drf&#39;</span><span class="sy0">,</span> <span class="st0">&#39;mrw&#39;</span><span class="sy0">,</span> <span class="st0">&#39;nef&#39;</span><span class="sy0">,</span> <span class="st0">&#39;nrw&#39;</span><span class="sy0">,</span> <span class="st0">&#39;orf&#39;</span><span class="sy0">,</span> <span class="st0">&#39;dng&#39;</span><span class="sy0">,</span> <span class="st0">&#39;ptx&#39;</span><span class="sy0">,</span> <span class="st0">&#39;pef&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#39;arw&#39;</span><span class="sy0">,</span> <span class="st0">&#39;srf&#39;</span><span class="sy0">,</span> <span class="st0">&#39;sr2&#39;</span><span class="sy0">,</span> <span class="st0">&#39;x3f&#39;</span><span class="sy0">,</span> <span class="st0">&#39;erf&#39;</span><span class="sy0">,</span> <span class="st0">&#39;mef&#39;</span><span class="sy0">,</span> <span class="st0">&#39;mos&#39;</span><span class="sy0">,</span> <span class="st0">&#39;raw&#39;</span><span class="sy0">,</span> <span class="st0">&#39;rw2&#39;</span><span class="sy0">,</span> <span class="st0">&#39;cap&#39;</span><span class="sy0">,</span> <span class="st0">&#39;iiq&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&#39;r3d&#39;</span><span class="sy0">,</span> <span class="st0">&#39;fff&#39;</span><span class="sy0">,</span> <span class="st0">&#39;pxn&#39;</span><span class="sy0">,</span> <span class="st0">&#39;bay&#39;</span><span class="sy0">,</span> <span class="st0">&#39;rwz&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$ngImages</span> &nbsp;<span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$okImages</span> &nbsp;<span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$nonImages</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$files</span> <span class="sy0">=</span> <span class="kw2">new</span> RecursiveIteratorIterator<span class="br0">&#40;</span><span class="kw2">new</span> RecursiveDirectoryIterator<span class="br0">&#40;</span><span class="re1">$path</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$files</span> <span class="kw1">as</span> <span class="re1">$name</span> <span class="sy0">=&gt;</span> <span class="re1">$file</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">in_array</span><span class="br0">&#40;</span>getExtension<span class="br0">&#40;</span><span class="re1">$file</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re1">$imgFileExtensions</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Modify Linux path to Windows path (&#39;/media/fat&#39; is &#39;E:&#39; and &#39;/&#39; is &#39;\&#39;)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$pathname</span> <span class="sy0">=</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st0">&#39;/&#39;</span><span class="sy0">,</span> <span class="st0">&#39;<span class="es0">\\</span>&#39;</span><span class="sy0">,</span> <span class="kw3">str_replace</span><span class="br0">&#40;</span><span class="st0">&#39;/media/fat&#39;</span><span class="sy0">,</span> <span class="st0">&#39;E:&#39;</span><span class="sy0">,</span> <span class="re1">$name</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//&#39;W&#39; in the beginning of value of robustRepresentation stands for &#39;Windows&#39;?</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$sql</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT COUNT(*) FROM AgLibraryFile WHERE robustRepresentation=&#39;W$pathname&#39;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$db</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re1">$sql</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">fetchColumn</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Image not found in Lightroom. Echo path and filename.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$file</span><span class="sy0">-&gt;</span><span class="me1">getPathname</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//Be careful &#8211; unlink deletes the file! unlink($file-&gt;getPathname());</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$ngImages</span><span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="re1">$okImages</span><span class="sy0">++;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &#39;Not an image: &#39;.$file-&gt;getPathname().&quot;\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$nonImages</span><span class="sy0">++;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//echo &#39;Finished. OK: &#39;.$okImages.&#39; NG: &#39;.$ngImages.&#39; Non image: &#39;.$nonImages.&quot;\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getExtension<span class="br0">&#40;</span>SplFileInfo <span class="re1">$fileInfo</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$name</span> <span class="sy0">=</span> <span class="re1">$fileInfo</span><span class="sy0">-&gt;</span><span class="me1">GetFilename</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$extension</span> <span class="sy0">=</span> <span class="kw3">strrpos</span><span class="br0">&#40;</span><span class="re1">$name</span><span class="sy0">,</span> <span class="st0">&quot;.&quot;</span><span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$extension</span> <span class="sy0">!=</span> <span class="kw2">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$name</span><span class="sy0">,</span> <span class="re1">$extension</span><span class="sy0">,</span> <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$name</span><span class="br0">&#41;</span><span class="sy0">-</span><span class="re1">$extension</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mantynen.com/teemu/lightroom-non-cataloqued-photos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

